7/30 Python.03

今天比较摆啊悲


目录

7 条件和循环

8 迭代器与生成器

9 函数

10 数据结构

11 模块


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()) # 返回当前模块定义的所有名称

下一部分快看到一半了有点多明天再说

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名乙醛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值