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
2
3
print('''line1
...line2
...line3''')

布尔值 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)

总结

定义函数可以用上述五种参数组合,但其顺序必须是:

  1. 必须参数
  2. 默认参数
  3. 可变参数
  4. 命名关键字参数
  5. 关键字参数

递归函数

即函数可以调用自身

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


python学习笔记1
https://www.wuzeyu.site/2022/02/21/python-learn-1/
作者
吴泽雨
发布于
2022年2月22日
许可协议