热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python3基础学习笔记

Python3基础学习笔记这篇博客不是完整的python教程,只是我在学习python3时记下的一些容易忘记的或比较重要的知识点,里面的代码大多是转自廖雪峰的python3教程和

Python3 基础学习笔记

这篇博客不是完整的python教程,只是我在学习python3时记下的一些容易忘记的或比较重要的知识点,里面的代码大多是转自 廖雪峰的python3教程 和 菜鸟教程 。不管怎样,还是希望本篇博客对读者有用。

基础语法

  1. py3里的print比py2多加了括号,使用方式为:
print ("hello world!")
  1. 多行语句的实现方式为反斜杠 \
total = item_one + \
item_two + \
item_three
  1. 在 [], {}, 或 ()中的多行语句,不需要使用反斜杠()
total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']
  1. python3中的复数用 j 表示

基本数据类型

  1. 输出字符串时,如果不想让其中的\变成转义字符,可以在字符串前面加一个r。
  2. python中的字符串不能被改变(赋值)

算术运算符

  • % 返回除法的余数
  • ** 返回次幂
  • // 返回除法的整数
  • 逻辑运算符只有 and or not
  • 运算符的优先级:

编程第一步

关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下:

a, b = 0, 1
while b <1000:
print(b, end=',')
a, b = b, a+b

语句结构

  • 条件语句中 elif 即c语言的 else if
  • for 循环的一些用法:
languages = ["C", "C++", "Perl", "Python"] 
for x in languages:
print (x)
for i in range(0, 10, 3) :
print(i)

数字

  • 数学函数:
  • 随机数函数:
  • 三角函数:

字符串

  • 字符串运算符:
  • 字符串格式化输出:
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
  • python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
  • 字符串内建函数:





列表(list)

  • 列表包含的方法:

元组(tuple)

  • Python 的元组与列表类似,不同之处在于元组的元素不能修改。
  • 元组的元素不能被删除,但整个元组可以被删除。
  • 元组使用小括号或者不加,列表使用方括号
  • 创建空元组只要一个括号。
  • 创建一个元素的元组需要在元素后面加逗号。

字典(dictionary)

  • 创建字典的语法:
d = {key1 : value1, key2 : value2 }
  • 字典的key可以是数字,字符串或元组,但不能是列表
  • 字典的value可以有列表或字典
  • 字典的内置方法:

迭代器和生成器

  • 迭代器用于输出列表的几种方法:
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象

for x in range(len(list)):
print(next(it), end=" ")
list=[1,2,3,4]
it = iter(list)
for x in it:
print (x, end=" ")
import sys         # 引入 sys 模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象

while True:
try:
print (next(it), end=" ")
except StopIteration:
sys.exit()
  • 生成器可以理解为一种特殊的函数,在执行generator过程中,遇到yield就中断,返回该返回的数,下次又继续执行,如果没有yield可执行了,就报错。例子:
def fib(n):
a, b , counter = 0, 1, 0
while counter yield b
a, b = b, a+b
counter += 1

import sys

f = fib(20)
print(type(f))
while True:
try:
print(next(f), end=' ')
except StopIteration:
sys.exit()

for x in fib(20):
print(x, end=' ')

函数

  • python3 调用函数时可使用的正式参数类型:
#必须参数
def printme( str ):
print (str)
return

printme()
#关键字参数
def printinfo( name, age ):
print ("名字: ", name)
print ("年龄: ", age)
return

printinfo( age = 22, name = "cyiano" )
#默认参数
def printinfo( name, age = 35 ):
print ("名字: ", name)
print ("年龄: ", age)
return;

printinfo(age=50, name="cyiano")
print ("------------------------")
printinfo(name="cyiano")
#不定长参数
def printinfo( arg1, *vartuple ):
print ("输出: ")
print (arg1)
for var in vartuple:
print (var)
return

printinfo( 10 )
printinfo( 70, 60, 50 )
  • python 函数中新加的变量为局部变量

数据结构

列表

  • python中的列表可以当做堆栈来使用,每次.pop()弹出的是最后的元素
  • python中的列表还可以当做队列使用,每次.popleft()弹出的是最前的元素。例如:
from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.popleft()
  • 列表推导式:在一行内利用for、if语句生成数组。例如:
vec = [2, 4, 6, 8]
[[x*2, x**2] for x in vec if x>2]

v1 = [2, 4, 6]
v2 = [4, 3, -9]
[x*y for x in v1 for y in v2]
[x+y for x in v1 for y in v2]
  • 嵌套列表,以矩阵转置为例,实现方法如下:
matrix = [
[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]
]
transposed = [[row[i] for row in matrix] for i in range(4)]
matrix = [
[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]
]
transposed = []
for i in range(4):
transposed.append([row[i] for row in matrix])
matrix = [
[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]
]
transposed = []
for i in range(4):
transposed_row = []
for row in matrix:
transposed_row.append(row[i])
transposed.append(transposed_row)
  • 用del把一个列表删成空列表的方式:del a[:]

遍历

  • 字典的遍历方法:
for k, v in knights.items():
  • 列表的遍历方法:
for i, v in enumerate(['tic', 'tac', 'toe']):
  • 反向遍历的方法:
for i in reversed(range(1, 10, 2)):
  • 按顺序遍历集合的方法:
for f in sorted(set(basket)):

模块

  • 一般的导入方法:
import support
support.name_access("cyiano")
  • 在文件夹内的导入方法:
import folder.support   #文件夹最好不要有空格
folder.support.name_access("cyiano")
  • 给模块内函数赋予本地名称:
import folder.support
folder.support.name_access("cyiano")
access = folder.support.name_access
  • from…import语句的使用:
from folder.support import name_access  #导入模块特定函数
from folder.support import * #导入模块所有函数
name_access("cyiano")
  • 使用包来管理python模块空间时,目录必须有一个 __init__.py 文件。

输入和输出

输出格式美化

  • print中字符串后面可以跟上 .ljust().rjust().center()zfill()
  • print中用.format()的话需要在语句里加大括号{},.format()会自动扫描大括号。大括号里的内容决定输出字符的排列,例如:
import math
print('常量 PI 的值近似为 {0:5.10f}。'.format(math.pi))
# :前面数字代表format中的编号,5.10代表总长5位右对齐,保留10位小数
  • .format()里面可以是一个字典:
print('{name}网址: {site}'.format(name='菜鸟教程', site='www.runoob.com'))
  • 比较旧的传递参数方式:
import math
print('常量 PI 的值近似为:%5.10f。' % math.pi)

文件对象方法

  • 打开一个文件:
f = open("newtxt.txt", "r+")    # "w"表示只写,"r"表示只读,"r+"表示可读又可写,还有其他模式
  • 读和写:
f.read(15)      # 读取15个字节,没有参数则读取所有
f.readline() # 读取一行
f.readlines() # 读取所有行并返回列表,有参数则按固定长度进行分割

f.write("ahahahaaha.....") # 从指针的位置开始写(会覆盖),必须是字符串

f.seek(5) # 移动指针位置

f.close() # 最后记得关闭文件
  • 有一种方法可以在打开文件读取完毕后自动调用close()函数,就是使用with语句:
with open('/path/to/file', 'r') as f:
print(f.read())

StringIO 和 BytesIO

  • 很多时候,数据读写不一定是文件,也可以在内存中读写。StringIO顾名思义就是在内存中读写str,而BytesIO实现了在内存中读写bytes。

pickle模块


错误和异常

  • try和except可以用来处理异常情况。except后面可以跟一个特定异常类型,或用元组表示的一组类型,或者什么都不跟(任何异常都会触发)。
  • 如果使用else语句,必须在except后面。else语句在没有异常时执行。
  • finally语句不论有无异常都会执行。
while True:
try:
x = int(input("Please enter a number: "))
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Not a valid number! Try again! ")
else:
print("You just have inputed: {}".format(x))
finally:
print("next round: ")
  • 抛出一个异常使用raise语句,raise后面跟上特定的异常类型。
def division(x, y):
if y == 0 :
raise ZeroDivisionError('The zero is not allow')
return x / y

try:
division(2, 0)
except ZeroDivisionError as e:
print(e)

# 另一种方法
try:
division(2, 0)
except ZeroDivisionError:
raise

标准库概览

  • 操作系统接口:os, shutil,
  • 文件通配符:glob
  • 命令行参数、错误输出重定向和程序终止:sys
  • 字符串正则匹配:re
  • 数学:math, random
  • 日期和时间:datetime
  • 数据压缩:zlib
  • 模块测试:doctest, unittest

推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
author-avatar
手机用户2702934194
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有