python学习笔记1
python基础
python单行注释是用井号,多行注释可以用三个单引号或双引号
- python大小写敏感
- 语句后面没有结束符。
- 使用缩进识别代码块
- 当语句用冒号结尾时,缩进语句视为代码块
整数和负整数
十六进制数,前面加0x
如0x9f5ab等
多位数字可以中间可以用_分隔
10_000_000_000和10000000000完全一样,十六进制数同理
浮点数
1.23 -9.65
科学计数法:
1.23e9 1.2e-5
字符串
单引号或双引号
双引号可以引在单引号外表示’这个字符串
也可以用转义字符
\' \" \n 换行 \t 制表符 \\ 反斜杠
打印时可以用r’’表示’’内的字符串默认不转义。
同时允许在字符串内用三个单引号和三个点表示多行内容
如下
1 |
|
布尔值 True False
可以用and,or,not运算
空值
None
两种除法 /和//
10/3 结果为浮点数,刚好整数结果也是浮点数
10//3 地板除,只取结果整数部分
10%3 取余数
编码
python3中使用Unicode编码
ord()函数获取单个字符编码的整数表示
chr()函数吧编码转换为对应字符
‘\u4e2d\u6587’和’中文’完全等价
bytes类型数据用b’’表示
len()计算str包含多少字符
若其中是bytes则计算字节数
格式化 用%实现
'Hello,%s,you are %d'%('Jack',22)
>>>Hello,Jack,you are 22
%%转义表示%字符
字符串的format()方法格式化
f-string字符串,直接包含变量{var}。
内置数据类型list
如
classmates=['Machael','Bob','Tony']
len(classmates)可以获得list元素个数
用索引访问元素,从0开始
classmates[0]
索引-1直接获取最后一个元素,同理倒数第二为-2,倒数第三-3
list.append(xxx)方法向list末尾追加元素xxx
list.insert(index,xxx)方法把元素xxx插入index处位置
list.pop(i)删除i处元素,缺省为最后一个元素
list中的元素类型可以不同,也可以是list
空list长度为0
有序列表tuple
一旦初始化后不能修改
classmates=('Mich','Bob','Tony')
定义空的tuple可以用
t=()
定义只有一个元素的tuple需要加一个逗号
t=(1,)
条件判断
if <判断条件1> :
<执行1>
elif <判断条件2> :
<执行2>
else:
<执行3>
循环
for in 循环
for x in range(101):
sum = sum + x
print(sum)
for 变量i in list变量:
i会遍历list中的每一个元素
range(n)会生成0 ~ n-1的整数序列
while循环
只要条件满足就不断循环,不满足时推出循环
while 条件:
语句
break和continue
break语句可以提前退出循环
continue语句可以跳过当此循环
dict和set
dict字典
字典dict,使用key-value存储,查找速度快。
创建字典
d = {'Michael':95,'Bob':75,'Tony':85}
根据key读取value
>>>d['Bob']
75
也可以赋值
d['Adam']=69
一个key只能对应一个value
用in
判断key是否存在
>>>'Thmas' in d
False
或是用get()
方法,不存在时返回None
d.get('Thomas')
用pop(key)
方法删除key
d.pop('Bob')
set
set就是key的组合但不存储value,因此set中不能重复key
常见set需要提供list作为输入集合
s = set([1,2,3])
用add(key)
方法添加元素
用remove(key)
方法删除元素
s.add(4)
s.remove(4)
set之间可以做交际,并集操作
s1 = set([1,2,3])
s2 = set([2,3,4])
s1 & s2 #并集
>>>{2,3}
s1 | s2 #交集
>>>{1,2,3,4}
关于可变和不可变变量
可变对象:list dict set
不可变对象: tuple string int float bool
对于可变对象,函数收到其引用,因此可以改变原始值
对于不可变对象,相当于传值,则不能改变原始对象
函数
调用函数
使用help(函数名)
查看其帮助信息
abs()参数只有一个,返回其绝对值
max()可以接受多个参数,返回最大的
数据类型转换
int(),float(),str(),bool()
函数名指向一个函数对象的引用,可以把函数名赋给一个变量.
定义函数
使用def
语句,写出函数名,括号,括号中的参数和冒号,在缩进块中写函数体,用return
语句返回.
def myFunction(x):
sentence1
sentence3
return x
没有return
时默认返回None
,return None
可以简写为return
空函数
用pass
语句占位,什么也不做
def nop():
pass
数据类型检查可以用isinstance()
if not isinstance(x,(int,float)):
raise TypeError('bad operand type')
如果传入错误参数类型就会抛出一个错误
函数可以返回多个值
return x,y
实际上返回的是tuple
函数的参数
位置参数
函数参数为多个,调用时传入按位置顺序依次赋值
默认参数
定义时设置如x=2
,则其为默认值,可以缺省.
必选参数要放在默认参数前面
!!warn!! 默认参数必须指向不变对象
可变参数
在定义时参数前面加*
号
def Function(*x):
sentence
return
函数内部接收后自动组装为tuple
在调用时,可以在list或tuple前面加*
号,将其元素变成可变参数传入函数
Function(*tuple)
关键字参数
传入参数在函数内自动组装为dict
def Function(**kw):
pass
调用
Function(key='value')
也可以将一个dict直接传入函数
Function(**dict)
命名关键字参数
令函数只接受某些关键字的参数
需要一个特殊分隔符*
,其后的参数作为命名关键字参数
def Function(a,b,*,key1,key2)
pass
这里*
的作用可以被可变参数代替,即若有可变参数,则不需要*
def Function(a,*b,key1,key2)
总结
定义函数可以用上述五种参数组合,但其顺序必须是:
- 必须参数
- 默认参数
- 可变参数
- 命名关键字参数
- 关键字参数
递归函数
即函数可以调用自身
def fact(n): # 计算阶乘函数
if n == 1:
return 1
return n * fact(n-1)
为避免栈溢出,使用尾递归优化
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式
def fact(n):
return fact_iter(n,1)
def fact_iter(num,product):
if num == 1:
return product
return fact_iter(num-1,num*product)
挺好
python高级特性
切片
诸如,取出list中某索引范围的值a:b:c
从a开始到b间隔为c
若a=0,c=1
可缺省
也可以倒数取-5:-1
可用于list,tuple,字符串
list[:]
tuple[:3]
'ABCDEF'[-3:-1]
tips 诸如将序列倒序可以用n[::-1]
迭代
for循环遍历list或tuple
for i in list:
pass
for i in tuple:
pass
也可以迭代dict
for key in dict:
pass
若要迭代value,可以用for value in dict.values()
若要同时迭代key和value,可以用for key,value in dict.items()
字符串也可以遍历,for ch in 'ABC':
使用collections.abc模块的Iterable类型判断一个对象是否可以迭代
from collections.abc import Iterable
isinstance('abc',Iterable)
#若可迭代,结果为True,否则False
使用enumerate
函数将list变为索引-元素对,可以在for循环中同时迭代索引和元素
for i,value in enumerate(['A','B','C']):
列表生成式
列表生成式
要生成list[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
,可以用list(range(1, 11))
要生成类似[1*1,2*2,3*3,...,10*10]
,则可以用[x*x for x in range(1,11)]
,把要生成的元素放在前面,后面跟for循环
若用if…else
可以在后面只加if:[x for x in range(1,11) if x % 2 == 0]
或者在前面加if…else:[x if x % 2 == 0 else -x for x in range(1,11)]
生成器
不必创造完整的list,节省内存
一边循环一边计算,生成器generator
创建generator
方法一,把列表生成式的[ ]
改成( )
即可
g = (x*x for x in range(10))
打印generator可以用next()函数,它不断获取其下一个返回值
或是for循环for n in g: print(n)
用yield
关键字定义generator,一个函数定义中包含yield
,则这个函数为generator函数
generator函数调用next()时执行,遇到yield
语句返回,再次执行时从上次返回的yield
处继续执行.
如斐波那契数列生成
def fib(max):
n,a,b = 0,0,1
while n < max:
yield b
a,b = b,a+b
n=n+1
return 'done'
for i in fib()
f=fib(6) #需要这样做,之后就用f,不然每次调用函数会重新生成
迭代器
可以直接作用于for循环的对象统称可迭代对象Iterable
使用isinstance()
判断是否Iterable对象
from collections.abc import Iterable
isinstance([],Iterable)
可以用next()
函数调用并返回下一个值的对象称为迭代器Iterator
使用isinstance()
判断是否迭代器
from collections.abc import Iterator
isinstance((x for x in range(10)),Iterator)
生成器都是Iterator对象
list,dict,str是Iterable但不是Iterator,但他们可以用iter()
函数编程Iterator