Python笔记——壹
做个Python笔记,这些容易健忘啊,总结一下:
1,在python代码第一行加入下面这一句 ,中文就可识别了,程序运行正常。
#coding=utf-8
2,list是一个可变的有序表,添加元素和删除元素分别是
classmates = ['Michael', 'Bob', 'Tracy']
classmates.append('Adam') #['Michael', 'Bob', 'Tracy', 'Adam']
classmates.insert(1, 'Jack') #['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
classmates.pop() #['Michael', 'Jack', 'Bob', 'Tracy']
3,元组tuple初始化后不能修改。
t = (1,) #只有一个元素时避免歧义,加一个逗号代表元组
4,字典dict使用键-值(key-value)存储,无序
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
d.pop('Bob') #删除元素,{'Michael': 95, 'Tracy': 85}
5,set和dict类似,也是一组key的集合,但不存储value,元素无重复无序。
s = set([1, 1, 2, 2, 3, 3]) #{1, 2, 3}
s.add(4) #添加元素
s.remove(4) #删除元素
- str被视为不可变对象,在Python中无法对其进行修改;而列表(list)则是可变的对象,在操作中可以进行更新和修改。Python函数返回多个值的方式即为返回一个元组。
- 当使用星号(*)符号时,在函数定义中就可以将参数设置为可变的;这样做的效果就相当于将函数参数转换为一个可迭代的对象。
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
#调用的时候,需要先组装出一个list或tuple
>>> calc([1, 2, 3])
14
>>> calc((1, 3, 5, 7))
84
#只需要加一个*号,就可以将函数参数变成可变参数
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1, 2, 3)
14
>>> calc(1, 3, 5, 7)
84
#*nums表示把nums这个list的所有元素作为可变参数传进去。
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
The function now accepts any number of keyword arguments, which are automatically collected into a dictionary structure.
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
# **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
字典d={key:value}
对于字典d中的每一个键key,默认会遍历其键值对key。
如果需要仅遍历键值对中的键key,则可以使用for循环直接提取键key进行操作。
若希望同时获取键key及其对应的值value,则可以采用for-in循环结合字典values()方法来进行操作。
10,列表生成式
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
>>> [x for x in range(1, 11) if x % 2 == 0]
[2, 4, 6, 8, 10]
11,生成器generator
在结构上,L与g的主要区别在于它们分别使用了方括号[]和圆括号()作为最外层的容器。其中,L是一个列表数据类型,而g则是一个生成器对象。通过调用next()函数可以获得generator中的下一个元素值。
>>> L = [x * x for x in range(10)] #生成列表
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10)) #生成生成器
>>> g
<generator object <genexpr> at 0x1022ef630>
另一种为生成器(generator)的方法来定义生成器(generator)。若在一个函数定义中使用了yield关键字,则该函数不再是传统意义上的普通函数,并被归类为生成器(generator):
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循环中直接操作的对象被称为可迭代对象:Iterable。可通过isinstance()函数判断一个对象是否属于Iterable类别。
>>> from collections.abc import Iterable
>>> isinstance([], Iterable)
True
