今天比较摆啊悲
目录
7 条件和循环
'''
if <>:
elif <>:
else:
'''
# break相当于条件False continue相当于条件True
'''
while <>: 只有一条可以写同一行
else:
'''
'''
for <> in <>:
else:
'''
# break跳出当前循环体 continue跳过剩余语句进行下一轮循环
# pass占位
8 迭代器与生成器
"""迭代器"""
l1=[1,2,3,4]
it=iter(l1) # 创建迭代器对象
for i in range(4):
print(next(it),end=',') # 输出迭代器的下一个元素
for x in it:
print(x,end=',') #此时it已经遍历到最后一个元素所以不会再输出
'''类中实现'''
# 虽然现在还没看到类
class A:
def __iter__(self):
self.a=1
return self
def __next__(self):
if self.a<10:
x=self.a
self.a+=1
return x
else:
raise StopIteration # 触发StopIteration异常(用于标识迭代的完成)
u=A()
it=iter(u)
for i in it:
print(i,end=',')
"""生成器"""
# "yield" not allowed outside of a function or lambda
def f():
a=0
for i in range(3):
yield a
a+=1
return
#不写return a也行,因为:“在调用生成器运行的过程中,
# 每次遇到yield时函数会暂停并保存当前所有的运行信息,
# 返回yield的值, 并在下一次执行next()方法时从当前位置继续运行”
v=f()
for i in v:
print(i,end=',')
9 函数
'''关于不可变对象'''
a=1
print(id(a))
a=b=10
print(id(a),id(b)) # a地址变,b和a地址相同
'''关于可变对象'''
#<A>前天的 l2=['1' for i in range(3) for l1[i] in l1 if i>1]
'''
for i in range(3):
for l1[i] in l1:
if i > 1:
l2.append('1')
'''
#为什么l1里面全变成l1[3]了,大概是(不是很确定):
#参数传递的可变类型 类似C++的引用传递
#如fun(la),将la真正的传过去,修改后fun外部的la也会受影响
'''参数'''
# 必需参数(位置参数)
# 关键字参数(命名参数):调用时参数顺序可与声明时不一致
# 默认参数:函数里参数有默认值,若不传入则使用
# 不定长参数:
def f(a,*tup,**dic):
print(a,end=',')
print(tup,end=',')
print(dic)
f(1,2,k1=3) #输出:1,(2,),{'k1': 3} 注意变量名不要重复,键不要加引号
# 关于单独的/和*:位置参数 / 位置or关键字参数 * 关键字参数
'''匿名函数'''
# 不能访问参数列表之外或全局参数,不同于C++的内联函数(调用小函数时不占用栈内存从而增加运行效率)
y= lambda x,z:x+z # lambda是表达式
print(y(2,3)) #输出5
def f(n):
return lambda x: x+n
y=f(2) #函数f的参数n设置为2
print(y(3)) #匿名函数的参数x设置为3,输出5
10 数据结构
'''嵌套列表解析'''
#转置矩阵:
matrix=[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]]
#1 常规方法
matrix_trans=[[matrix[r][c] for r in range(3)] for c in range(4)]
print(matrix_trans) #[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
#2 以下r和matrix[]同级,r[]和matrix[][]同级
matrix_trans=[[r[c] for r in matrix] for c in range(4)]
print(matrix_trans) #一样
#3 用attend把列表看成元素加进去而不是extend把列表元素分别加进去
matrix_trans=[]
for c in range(4):
row=[]
for r in matrix:
row.append(r[c])
matrix_trans.append(row)
print(matrix_trans)
'''构造字典'''
print(dict([('a',1),('b',2)])) #对元组列表创建字典{'a': 1, 'b': 2}
dct=dict(a=1,b=2) #一样,不用引号
'''遍历技巧'''
# enumrate()解读列表
for index,val in enumerate(matrix):
print(index,val)
#输出:
# 0 [1, 2, 3, 4]
# 1 [5, 6, 7, 8]
# 2 [9, 10, 11, 12]
# items()解读字典
for key,val in dct.items():
print(key,val)
#输出:
# a 1
# b 2
# zip()组合同时遍历
for i,j in zip(matrix,matrix_trans):
print('m1:{0},m2:{1}'.format(i,j))
#元素个数多出的舍去
# m1:[1, 2, 3, 4],m2:[1, 5, 9]
# m1:[5, 6, 7, 8],m2:[2, 6, 10]
# m1:[9, 10, 11, 12],m2:[3, 7, 11]
# reserved() 反向遍历
# sorted() 顺序遍历(可用来去重)而不改变原值
11 模块
import sys
for i in sys.argv: # 命令行参数
print(i)
print(sys.path) # 路径
# .py文件是模块
# 通过import导入,可以用该文件名.对象来访问,感觉类似C++的类
# 或通过 from 文件名 import 对象 若对象写成*则全部导入
if __name__=='__main__':
print('程序自身在运行') # 在此写不希望该模板被导入之后运行的语句
else:
print('我来自另一模块')
import Untitled_1 #注意命名要规范,默认文件名的-是会报错
print(dir(Untitled_1)) # 返回模块内定义的所有名称
print(dir()) # 返回当前模块定义的所有名称
下一部分快看到一半了有点多明天再说