Two---python循环语句/迭代器生成器/yield与return/自定义函数与匿名函数/ ...

  金牌会员 | 2022-6-24 12:11:45 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

python基础02

条件控制


  • python条件语句是通过一条或多条语句的执行结果(Ture或者False)来执行的代码块
  • python中用elif代替了else if,所以if语句的关键字为:if-elif-else。


  • 注意
  • 每个条件后面都要用冒号:,表示接下来是满足条件后要执行的语句块
  • 使用缩进来划分语句块,相同缩进数的语句在一期组成一个语句块
  • 在python中没有switch-case语句
  1. #if-else语句
  2. age = int(input("请输入年龄:"))
  3. if age >= 7:
  4.     print("可以上小学")
  5. else:
  6.     print("年龄未满足要求,不可以上小学")
  7. ---------------------------------------------------
  8. 请输入年龄:8
  9. 可以上小学
  10. ---------------------------------------------------
  11. 请输入年龄:3
  12. 年龄未满足要求,不可以上小学
复制代码
  1. #if-elif语句
  2. holiday_name = input("请输入节日:")
  3. if holiday_name == '儿童节':
  4.     print("是小孩子的节日!")
  5. elif holiday_name == '端午节':
  6.     print("今天要吃粽子!!")
  7. elif holiday_name == '情人节':
  8.     print("今天要买一束花送给她!")
  9. else :
  10.     print("今天是努力的一天!")
复制代码
  1. #if嵌套语句
  2. list1 = [1,3,5,9,'apple','bee']
  3. a = input("请输入")
  4. if a in list1:
  5.     if a == 'apple':
  6.         print("Ture")
  7.     else:
  8.         print(False)
  9. else:
  10.     print("请重新尝试")
  11. ---------------------------------------------------
  12. 请输入apple
  13. Ture
复制代码
三元运算(三目运算)

三元运算符是对简单的条件语句的简写


  • 写法:max = a if a>b else b
  1. #三元运算符
  2. a = int(input("输入a:"))
  3. b = int(input("输入b:"))
  4. print("a大于b") if a>b else print("b大于a") if a<b else print("a等于b")
  5. ---------------------------------------------------
  6. 输入a:3
  7. 输入b:3
  8. a等于b
复制代码
h3 id="循环语句"循环语句/h3blockquoteppython中的循环语句有for和while/p/blockquoteolli在python中没用do....while循环/lili可以通过设置条件表达式永远不为false来实现无限循环/li/olh4 id="while循环"while循环/h4blockquotepwhile循环使用else语句:如果while后面的体哦阿健语句为false时,泽执行else的句块/p/blockquote
  1. #一般形式
  2. while 判断条件(condition):
  3.       执行语句(statements)....
复制代码
  1. #while循环语句
  2. count = 0
  3. while count < 5:
  4.     print(count,"小于5")
  5.     count = count + 1
  6. else :
  7.     print(count,"大于等于5")
  8. ---------------------------------------------------
  9. 0 小于5
  10. 1 小于52 小于5
  11. 3 小于5
  12. 4 小于5
  13. 5 大于等于5
复制代码
h4 id="for循环"for循环/h4blockquotepfor循环可以遍历任何可迭代对象/p/blockquoteulli字符串/列表/元组/字典/集合/generator(生成器)/iterator(迭代器)都是可迭代的/lili可用for去访问上述中内的每一个元素/lilibreak语句用于跳出当前循环体/li/ul
  1. #本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少?
  2. benjin = 10000
  3. nianlilv = 0.0003
  4. for i in range(1,6):
  5.     new = (benjin*nianlilv+benjin)
  6.     benjin = new
  7. print("五年后获得的本金为:",benjin)
  8. ----------------------------------------------------
  9. 五年后获得的本金为: 10015.009002700404
复制代码
h3 id="遍历技巧"遍历技巧/h3blockquotep在字典遍历中,关键字和对应的值可以使用items()方法同时解读出来:items()方法以列表返回试图对象,是一个可便利的key/value对/p/blockquote
  1. #items()方法字典遍历
  2. knights = {'gallahad':'the pure','robin':'the brave'}
  3. for k,v in knights.items():
  4.     print(k,v)
  5. ---------------------------------------------------
  6. gallahad the pure
  7. robin the brave
复制代码
blockquotep在序列遍历中,索引位置和对应值可以使用enumerate()函数同时得到:enumerate()函数用于可便利的数据对象(如列表、元组、字符串)组合为一个索引序列,同时列出数据和数据下标,一般用于for循环当中/p/blockquote
  1. #enumerate()函数进行序列遍历
  2. for i,v in enumerate(['tic','tac','toe']):
  3.     print(i,v)
  4. ---------------------------------------------------
  5. 0 tic
  6. 1 tac
  7. 2 toe
复制代码
blockquotep同时遍历两个或多个序列时,可以使用zip()组合。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 ***** 号操作符,可以将元组解压为列表。/p/blockquote
  1. #zip()函数将对象元素打包
  2. a = [1,2,3]
  3. b = {'ada','dasd','ads','aaaa'}
  4. for x,y in zip(a,b):
  5.     print(x,y)
  6. ---------------------------------------------------
  7. 1 dasd
  8. 2 aaaa
  9. 3 ads
复制代码
  1. #zip()函数依次取出二位列表的每列函数
  2. list1 = [[1, 2, 3, 4, 5, 6],
  3.          [1, 3, 5, 7, 9, 11],
  4.          [3, 4, 5, 6, 8, 9],
  5.          [2, 4, 6, 8, 10, 12],
  6.          [0, 3, 5, 7, 9, 0],
  7.          [5, 6, 8, 2, 3 ,4]]
  8. for i in zip(*list1):
  9.     print(i)
复制代码
blockquotepreversed()函数返回一个反转的迭代器,因此要反转一个序列,首先指定这个序列然后调用reversed()函数/p/blockquote
  1. #reversed()函数反转迭代器
  2. star = "qwert"
  3. print(list(reversed(star)))
  4. -----------------------------------------------------
  5. ['t', 'r', 'e', 'w', 'q']
复制代码
blockquotep要按顺序遍历一个序列,可以使用sorted()函数返回一个已经排序的序列,并不修改原值。/p/blockquoteullisorted()函数可以对所有可迭代对象进行排序操作/lililist.sort()方法改变的为原始的list,返回值为None,而sorted()返回的是一个新的list,不会在原来的list基础上进行改变/lililist.sort()方法只为list定义,而sorted()函数可以接受任何的iterable(迭代对象)/li/ul
  1. #sorted()函数遍历排序
  2. a = sorted([5,6,2,4,3,9,8]) #默认升序
  3. print(a)
  4. b = a.sort() #list.sort方法返回的是原始的列表,值为None
  5. print(b)
  6. -----------------------------------------------------
  7. [2, 3, 4, 5, 6, 8, 9]
  8. None
复制代码
h3 id="pass语句"Pass语句/h3blockquotep在python中pass是空语句,是为了保持程序结构的完整性,pass不做任何事情,一般用做占位语句/p/blockquote
  1. #pass语句占位
  2. while True:
  3.     pass
  4. -----------------------------------------------------
  5. #返回为空
复制代码
h3 id="迭代器与生成器"迭代器与生成器/h3olli迭代器是python最强大的功能之一,是访问集合元素的一种方式/lili迭代器是一个可以记住遍历的位置的对象/lili迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问结束;迭代器只能前进不能后退/lili迭代器有两个基本的方法:iter()和next()/lili字符串,列表或元组对象都可用于创建迭代器/li/ol
  1. #简单的迭代器
  2. list1 = [1,2,4,5,6]
  3. a = iter(list1) #创建迭代器对象
  4. print(next(a)) #输出迭代器的下一元素
  5. print(next(a))
  6. print(next(a))
  7. -----------------------------------------------------
  8. 1
  9. 2
  10. 4
复制代码
blockquotep迭代器对象可以使用常规for语句进行遍历/p/blockquote
  1. #使用for语句进行迭代器遍历
  2. list1 = [1,2,4,5,6]
  3. a = iter(list1)
  4. for x in a:
  5.     print(x,end="") #end传递空字符串,意为末尾不换行加空格
  6. -----------------------------------------------------
  7. 12456
复制代码
h3 id="生成器yield与return区别"生成器/yield与return区别/h3blockquotep什么是生成器?可以通俗的认为,在一个函数中,使用yield来代替return的位置的函数就是生成器/p/blockquoteh4 id="yield"yield/h4olli在python中,使用了yield的函数被称为生成器(generator)/lili跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器/lili在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行/lili调用一个生成器函数,返回的是一个迭代器对象/li/olh4 id="return"return/h4olliruturn每次返回的是一个list列表,空间占用较大/lilireturn只会返回一个值,且return后面的代码不会执行/li/olh4 id="不同之处"不同之处/h4olliyield在调用生成器的时候,会将数据生成为object,每次需要调用next()函数进行下一步的执行,同时不可逆/liliyield输出的是一个对象,相当于容器,想要什么数据就取出什么数据,而return只会返回一个值,且后面代码不会执行/lili参考一个很好的例子:水车,先yield来装入数据、产出generator object、使用next()来释放;好比水车转动后,车轮上的水槽装入水,随着轮子转动,被转到下面的水槽就能将水送入水道中流入田里。/li/olh4 id="yield相较于return的优点"yield相较于return的优点/h4ulli反应更迅速/lili更节省空间/lili使用更加灵活/li/ulh4 id="参考"参考/h4ullia href="https://sulinyn.blog.csdn.net/article/details/107026132?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-2-107026132-blog-110546657.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-2-107026132-blog-110546657.pc_relevant_aa&utm_relevant_index=5" target="_blank" rel="noopener"(77条消息) python中的yield和return的区别_AcceptedLin的博客-CSDN博客_python yield和return的区别/a/li/ulh3 id="函数"函数/h3olli函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段/lili函数能提高应用的模块性,和代码的重复利用率/li/olh4 id="自定义函数"自定义函数/h4blockquotep自定义函数规则/p/blockquoteolli自定义函数代码块以def关键词开头,后接函数标识符名称和圆括号()/lili任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数/lili函数的第一行语句可以选择性的使用文档字符串——用于存放函数说明(即注释,可以使用 .emdoc/em 进行调用文档字符串属性)/lili函数内容以冒号:起始,并且缩进/lilireturn【表达式】结束函数,选择性的返回一个值给调用方,不带表达式的return相当于返回None/li/ol
  1. #自定义函数求圆的面积
  2. import math
  3. pi=math.pi #引用Π值
  4. def yuan(r):
  5.     s = pi*r*r
  6.     return s
  7. r = float(input("请输入半径:"))
  8. s = print(yuan(r))
  9. ---------------------------------------------------
  10. 请输入半径:5
  11. 78.53981633974483
复制代码
h3 id="参数传递"参数传递/h3blockquotep参数传递分为传不可变对象以及传可变对象/p/blockquoteullips:见One可变数据与不可变数据类型/li/ulh3 id="参数"参数/h3blockquotep以下是调用函数时可使用的正式参数类型:/pp必须参数/关键字参数/默认参数/不定长参数/p/blockquoteh4 id="必须参数"必须参数/h4ulli必须参数需要以正确的顺序传入函数。因此也叫位置参数,调用时的数量必须和声明时的一样,且位置参数必须放置在关键词参数之前/li/ul
  1. #调用printme()函数
  2. def printme(str):
  3.     print(str) #打印任何传入的字符串
  4.     return
  5. printme() #未传参报错
  6. ---------------------------------------------------
  7. TypeError: printme() missing 1 required positional argument: 'str'
复制代码
h4 id="关键字参数"关键字参数/h4ulli关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值/lili使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为python解释器能够用参数名匹配参数值/li/ul
  1. #调用printinfo()函数
  2. def printinfo(name,age):
  3.     print("姓名:",name)
  4.     print("年龄:",age)
  5.     return
  6. printinfo(age=19,name="runoob")
  7. ---------------------------------------------------
  8. 姓名: runoob
  9. 年龄: 19
复制代码
h4 id="默认参数"默认参数/h4ulli调用函数时,如果没用传递参数,则会使用默认参数/lili如下如果没用传入age参数,则使用默认值/li/ul
  1. #默认参数
  2. def printinfo(name,age = 35):
  3.     print("姓名:",name)
  4.     print("年龄:",age)
  5.     return
  6. printinfo(age=19,name="runoob")
  7. print("------------------------------")
  8. printinfo(name="runoob")
  9. ---------------------------------------------------
  10. 姓名: runoob
  11. 年龄: 19
  12. ------------------------------
  13. 姓名: runoob
  14. 年龄: 35
复制代码
h4 id="不定长参数"不定长参数/h4ulli如果在函数调用时没用指定参数,它就是一个空元组,我们也可以不向函数传递未命名的变量/lili不定长参数类型有两种:1.*+参数名 2.**+参数名/li/ulh5 id="参数名"*+参数名/h5ulli这种情况下在调用时会自动组装成一个元组/lili允许传入0个或任意多个参数/li/ul
  1. #不定长参数第一种
  2. def sum(*crad):
  3.     sum = 0
  4.     for weight in crad:
  5.         sum += weight
  6.         if sum > 500:
  7.             print("超重了!再不下,就给你一个大笔兜")
  8.     return sum
  9. sum_s = sum(50,80,200,200) #自动组成一个元组传入形参
  10. ----------------------------------------------------
  11. 超重了!再不下,就给你一个大笔兜
复制代码
**+参数名


  • 允许传入0个或任意多个参数
  • 这些参数会被自动组装成一个字典,而不是元组
  • 实参必须包含参数名,参数名作为字典的键,参数值作为字典的值
  1. #不定长参数第二种
  2. def student_n(**info):
  3.     print(info)
  4.     dict = info
  5.     return dict
  6. dict = student_n(name="小王",id="001",score="82")
  7. ----------------------------------------------------
  8. {'name': '小王', 'id': '001', 'score': '82'}
复制代码
单独出现*的参数

声明函数时,参数中星号*可以单独出现,如果单独出现星号后的参数必须用关键字传入
  1. #*关键字传参
  2. def f(a,b,*,c):
  3.     return a+b+c
  4. f(1,2,3) #星号后未用关键字传参导致报错
  5. ----------------------------------------------------
  6. Traceback (most recent call last):
  7.   File "f:/python_prictace/02-python.py", line 187, in <module>
  8.     f(1,2,3)
  9. TypeError: f() takes 2 positional arguments but 3 were given
复制代码
  1. #*关键字传参
  2. def f(a,b,*,c):
  3.     return a+b+c
  4. print(f(1,2,c=3))
  5. ----------------------------------------------------
  6. 6
复制代码
混合使用
  1. #混合使用
  2. def foo(*args,**kargs):
  3.     print(args)
  4.     print(kargs)
  5. foo(a=2,1,2,3)
  6. #当同时使用*和**时,必须将*的参数列在**的前面,否则会报错
  7. ----------------------------------------------------
  8. File "f:/python_prictace/02-python.py", line 196
  9.     foo(a=2,1,2,3)
  10.             ^
  11. SyntaxError: positional argument follows keyword argument
复制代码
  1. #混合使用
  2. def foo(*args,**kargs):
  3.     print(args)
  4.     print(kargs)
  5. foo(1,2,3,a=2)
  6. ----------------------------------------------------
  7. (1, 2, 3)
  8. {'a': 2}
复制代码
匿名函数


  • python使用lambda来创建匿名哈桉树
  • 所谓匿名函数,意为不再使用def语句标准的形式定义一个函数
  • lambda只是一个表达式,函数体比def简单的多
  • lambda的主体时一个表达式,而不是一个代码块;仅仅能在lambda表达式中封装有限的逻辑进去
  • lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
  • 虽然lambda函数看起来只能写一行,却不同于c或c++的内联函数,后者的目的是调用小函数时不占用栈内存,从而增加运行效率
  1. #lambda表达式创建一元二次方程
  2. def fx(a,b,c):
  3.     return lambda x : a*x*x + b*x + c
  4. f = fx(1,2,3)
  5. print(f(3))
  6. ----------------------------------------------------
  7. 18
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表