python语法快速入门
快捷键
优先级
变量
变量要先定义,在使用
字符串用单引号或者双引号,数字不用引号
命名规则:见名知义 不以数字和符号开头,不可使用关键字
查看关键字
import keyword
keywod.kwlist
数据类型
不同类型变量的计算
shift+enter --行内换下一行 ctrl+alt+enter -- 上一行 tab -- 向右缩进四个空格 shift tab -- 向左缩进四个空格 ctrl alt L --美化代码 ctrl / -- 加解注释 ctrl+shift+f10--自动运行 ctrl+q快速查看文档 ctrl+函数名--查看函数介绍 ctrl+d --复制当前行 ctrl+/ 单行注释# '''多行注释''' + - * / //取整除 %取余 幂 优先级:最高 其次:* / // % 加减最低 可通过加小括号改变优先级 多个单词全部小写,单词之间用下划线连接 大驼峰:多个单词,首字母大写 小驼峰:多个单词,首字母小写,其他首字母大写 变量名不会使用全大写 数字型:int float bool(True,False)complex 非数字型:str list tuple dict 数字型可以直接计算 字符串只能和整数相乘,代表重复n次,不能加减 字符串之间可以使用+连接
不同类型转换
input()
输入的变量结果只能是字符串,可以通过强制类型转化a=int(input("121"))
格式化字符串
如果一个字符串中出现%就是格式化字符串
%d代表格式化的是一个int,%f--float,%s--str
转义字符
可以使用强制类型转换(可转化的才能转化成功) int("123")--把字符串123转化位整数123 str(123)--整数123转化为字符串'123' float('3.4')--字符串'3.4'转化为浮点数 和round()函数功能相同---print(int(a / b + 0.5)) a=10 b=1 print("a的值是:%d" % a) print("a的值是:%d,b的值是:%d" %(a,b)) %03d--不足3位左边补0 %.2f--保留两位小数 %%--输出一个% name = "小明" print("我的名字叫%s, 请多多关照" % name) num = 1 print("我的学号是%06d" % num) price = 8.5 weight = 5 print("苹果的单价是%.1f/斤, 购买了%.2f斤, 需要支付%.2f元" % (price, weight, price * weight)) scale = 10.01 print("数据是%.2f%%" % scale)
python-day2
pass占位符,不确定到底执行什么代码时候使用pass
if单分支
if双分支
\t tab \n 回车换行 " 双引号 \ \ \b转义字符,退格键 print("我今天\n学习\n\t\\python\n很\高"'兴") print(r"我和\n你")--加r不转义,原样输出 print("我和你" ,end="") print('我和你') print默认以\n结尾,但是可以修改默认行为 end="\t" end="\" num1=int(input("请输入数字1:")) num2=int(input("请输入数字2:")) if num2 != 0: print(num1/num2) if分支实现加减乘除 num1=int(input("请输入数字1:")) num2=int(input("请输入数字2:")) a = input("请输入运算符") result=0; if a'+': result=num1+num2; print(result) if a'-': result = num1 - num2; print(result) if a'': result=num1num2; print(result) if a'/': result = num1/num2; print(result)
逻辑判断
if多分支
if嵌套
注意if和else的嵌套关系,相同层次才能配对
age=int(input("请输入年龄:")) if age>= 18: print("可以去网吧") else:print("回家写作业") #判断奇偶数 num1=int(input("输入任意整数:")) if num1%2==0: print("num1是偶数") else:print("num1是奇数") num1 = int(input("输入任意数:")) if num1 >= 0 and num1 <= 120: print("0-120之间") else:print("大于120") #判断用户名和密码 name = input("输入登陆账号:") passwd = input("输入登陆密码:") if name == 'itcast' and passwd == '123456': print("通过登陆") else:print("登陆失败") #判断正负数 num1 = int(input("输入任意整数:")) if num1 > 0: print("正数") elif num1 == 0: print("0") else:print("负数") #判定年龄范围 age=int(input("请输入年龄:")) if age < 10 and age > 0 : print("小孩") elif age>10 and age<=20 : print("小朋友") elif age>20 and age <30 : print("年轻人") elif age>30 and age<=50 : print("中年人") elif age > 50: print("老年人") else:print("年龄无效")
完善计算器
100以内的数能够被三整除 num1 = int(input("请输入一个整数:")) if num1>=0 and num1 <=100 : if num1%3 == 0: print("能被3整除") else:print("不能被三整除") else:print("不在0-100之间") #name = input("请输入字符串:") if name == 'tom': age = int(input("请输入年龄:")) if age >= 30 : print("大叔") else :print("小弟") else:print("姓名错误") # 输入任意一个整数 # 如果大于0,判断是否可以被3整除 # 如果小于0判断是否为偶数 # 如果等于0,显示0 num1 = int(input("num1=")) if num1 > 0: if num1 % 3 0: print("可以被3整除") else:print("不能被3整除") elif num1 == 0: print("0") else:if num1 % 2 0: print("偶数") else:print("奇数") num1 = int(input("请输入num1:")) num2 = int(input("请输入nun2:")) a = input("运算符:") if a "+": print(num1+num2) elif a "-": print(num1-num2) elif a== "": print(num1num2) elif a== "/": if num2 !=0: print(num1 / num2) else:print("0不能做除数") else:print("输入a不合法") #0不能做除数,a非+-*/提示输入不合法
运算符优先级
只要不是0,就是True,代表条件成立,0代表条件不成立
- 比较运算符:> >= < <= ==(等于) 2. 赋值运算符= += *= /= //= %= **=
- 算数运算符(**最高,+-最低)>比较运算符(><高,==,!=低)>赋值运算符>逻辑运算符
随机数
import random
num1 = random.randint(a,b)--取a-b之间的随机整数
猜拳小游戏
如果人输入的值不是1,或者2,或者3,提示输入错误.
猜拳改进版
不管是用户输入,还是显示的结果,都没有数字,只有"石头", "剪刀", "布"
电脑出拳是只能是随机整数,用变量替换随机整数,然后再和人输入的字符串比较即可
import random pc = random.randint(1, 3) person = int(input("人出拳:请输入1或者2或者3")) if (person == 1 and pc == 2) or (person == 2 and pc == 3) or (person == 3 and pc == 1):print("电脑出的%d, 我出的%d, 我赢了" % (pc, person)) elif person == pc: print("电脑出的%d, 我出的%d, 平局" % (pc, person)) else:print("电脑出的%d, 我出的%d, 我赢了" % (pc, person)) import random pc = random.randint(1, 3) # pc代表电脑 player = int(input("请输入1或者2或者3")) if player >= 1 and player <=3: if (pc == 1 and player == 2) or (pc == 2 and player == 3) or (pc == 3 and player == 1): print("电脑出的%d, 我出的%d, 电脑赢了" % (pc, player)) elif pc == player: print("电脑出的%d, 我出的%d, 平局" % (pc, player)) else:print("电脑出的%d, 我出的%d, 我赢了" % (pc, player)) else:print("输入错误,没有诚意,不和你玩了") import random pc = random.randint(1, 3) # pc代表电脑 if pc == 1: pc = "石头" elif pc == 2: pc = "剪刀" else:
顺序,分支,循环
程序习惯从0开始计数,一般都从0开始
while循环
循环计数
循环计算累加和
pc = "布" player = input("请输入石头或者剪刀或者布") if (player == "石头") or (player == "剪刀") or (player == "布"): if (pc == "石头" and player == "剪刀") or (pc == "剪刀" and player == "布") or (pc == "布" and player == "石头"): print("电脑出的%s, 我出的%s, 电脑赢了" % (pc, player)) elif pc == player: print("电脑出的%s, 我出的%s, 平局" % (pc, player)) else:print("电脑出的%s, 我出的%s, 我赢了" % (pc, player)) else:print("输入错误,没有诚意,不和你玩了") while 条件: 要重复的代码 # 死循环,计数的变量值不更新,一直循环 n = 0 while n <= 5 : print("aaa") # 计数从0开始,正序输出0-5 n = 0 while n <= 5 : print(n,end=" ") n += 1 # 计数从5开始,逆序输出5-0 n = 5 while n > 0 : print(n,end=" ") n -= 1 #计数从0开始,输出从5-0的数字 i=0 while i <= 5: print(5-i) i += 1 # 计数从5开始,循环输出0-5的数字 n = 5 while n >= 0 : print(5-n,end=" ") n -= 1
循环开始前定义一个变量,存放计算结果
在循环内部对变量进行计算
计算两个整数之间的偶数和
思路:可以先计算两个数的累加和,然后加上条件--偶数
因为两数的大小不确定,所以,加个判断
计算从1到5的累加和 sum=0 i = 1 while i <= 5 : sum += i i += 1 print(sum) # 计算1-100之间的累加和 sum = 0 i = 0 while i <= 100: sum += i i +=1 print(sum) # 计算从123到256的累加和 sum=0 i = 123 while i <= 256 : sum += i i += 1 print(sum) num1 = int(input("整数1:")) num2 = int(input("整数2:")) sum = 0 while num1 <= num2: if num1 % 2 ==0 : sum+= num1 num1 += 1 print(sum) num1 = int(input("整数1:")) num2 = int(input("整数2:")) sum = 0 if num1 <=num2: while num1 <= num2: if num1 % 2 ==0 : sum+= num1 num1 += 1 else:while num1 >= num2: if num1 % 2 == 0 : sum += num1 num1 -= 1 print(sum)
break
break与continue只在循环内部使用
循环遇到break终止
循环遇到continue结束本次循环,回到循环开始继续循环
continue
人造死循环
应用场景:书写代码的时候,不知道要循环多少次
显示指定行数的星号
a=6,跳出本次循环(while) a=0 while a< 10 : a+=1 if a== 6: break print(a)--a输出为1,2,3,4,5 print(a)--a最终结果为6 # 如果a=6,就不再执行continue下的代码 a=0 while a< 10 : a+=1 if a== 6: continue print(a)--1,2,3,4,5,7,8,9 # 死循环,a=6时,跳过continue下的语句,a一直满足a<10 a=0 while a< 10 : print(a)--输出0,1,2,3,4,5,6,6,6,,,然后就死循环 if a== 6: continue a += 1 # 把while后面的条件写成True,那么这个while就成为死循环 # 在死循环内部,一定要有个if语句能有条件的执行break,退出循环 while True: name = input("请输入姓名:") if name == "王大美": print("i love you") elif name == "王小美": print("i hate you") else:break
循环嵌套
一个while循环里面又嵌套了另一个while循环
变形:输出三角形
打印5行星号 # a = 0 # while a < 5: # print("") # a += 1 # 打印10行星号 # a = 0 # while a < 10: # print("") # a += 1 a = int(input("请输入行数:")) i=0 while i<a: print("") i += 1 if i >= 20: break # 内循环5次,一次输出一个 共输出一行***** # 外循环5次,输出5行 num1=0 while num1 < 5: a = 0 while a< 5: print("",end="") a += 1 print() num1 += 1 num=0--控制外循环次数 while num<5: a = 0 while a<= num: --控制内循环次数 print("",end="") a += 1 print()--内循环结束,回车换行,进入下一个外循环 num += 1 b=0 while b<5: a = 0 while a<=b: a += 1
for循环
for主要用在遍历
计算字符数量
range范围函数
生成一个指定范围的数列
print(a,end="") print() b += 1 #或者 num1=0 while num1 < 3: a=0 while a<= num1: print(a+1,end="") a += 1 print() num1 += 1 for n in 字符串: • 循环要执行的代码 str1='hello itcast' # for循环遍历字符串,for循环的次数代表字符的个数,定义变量i用于计算次数 i =0 for n in str1: i+=1 print(n)--输出字符 print(i)--输出字符数量 #str1 = "abc sfsfd sfdsfdsf werwerfwe sdsdfdsf " str=input("请输入字符串:") isNull=0 num=0 numd=0 for n in str: if n != " " isNull += 1 if n ==" ": num+=1 if n =='d': numd +=1 print("非空格的有效字符数量:%s"%int(num)) print("空格的数量:%s"%int(num)) print("d的数量:%s"%int(numd))
for替换while
改进版
0-100之间的偶数和,包括0和100
列表list
list相当于数组,用[]定义,
list中可以有多个元素,元素之间用逗号分隔
每一个元素都有对应的下标,下标从0开始
index是索引,不是关键字
range(start,stop,step) start开始值 stop最大值,最大值不包含stop, step步长,step为负时从大到小 range(1, 5) 生成从1到4的4个数字,不包含5 range(1, 5, 2) 生成1, 3两个数字 range(10, 0, -3) 生成10, 7, 4, 1这个范围 for循环遍历range()范围 for n in range(1, 5): print(n) while循环更多时候用在指定次数的循环 for多用于遍历 while和for可以互换 # 输出5行***** for n in range(0,5): for a in range(0,5): print("",end="") print() # 输出三角形 for n in range(0,5): for i in range(0,n+1): print("",end="") print() sum = 0 for n in range(0,101,2): sum += n; print(sum)
常用方法
小结
下标为负数,代表从后往前数,最后一个成员编号为-1
小练习
list2 = [1,2,3] list1 = ["刘备","关羽","张飞"] list3 = []#空列表 print(list1[1])#显示第二个元素的值 print(list1[3])#超出列表范围,报错 print(list2)#显示list所有成员,同时会显示中括号 list1.insert(1,'周瑜')#在指定的位置插入指定值 list1.append('曹操')#在列表末尾追加指定值 list1.extend(list2)#把指定列表添加到最后 list1[0] = '刘三'#修改指定元素的值 list1.remove('刘三')#删除指定的值 list1.remove('王五')#如果指定值不存在,报错 list1.pop()#删除最后一个成员 list1.pop(1)#删除指定索引的成员 list1.clear()#删除所有成员 print(list1) #返回指定值在列表中出现的次数,不存在返回0 a = list1.count('关羽') b = list1.count('张三')#返回指定值在列表中出现的次数 print(a) print(b) list2.sort()#列表成员从小到大排序 print(list2) list2.sort(reverse=True)#列表成员从大到小排序 list2.reverse()#把列表逆置 查询list1[索引] 添加 list1.insert(下标,值) list1.append(值) list1.extent(list2) 修改 list1[索引]=值 删除 list1.remove(索引,值) list1.remove(值) list1.pop() list1.pop(索引) list1.clear() 查询出现次数list1.count(值) list3 = []#空列表 list3.append(5) list3.append(5) list3.append(13) list3[1] = '周瑜' print(list3)
循环遍历列表
课堂练习
拆包
通过一个赋值语句,把list中所有成员的值赋值给多个变量
二维列表
多维列表
公用方法
for n in 列表: 循环要执行的代码 list1 = ["刘备","关羽","张飞"] #for循环3次,第一次n=刘备, for n in list1: print(n) list2 = [0, 3, 3, 9, 10 ,3 ,5] num=0#计算列表成员数量 sum=0#计算列表所有数字相加的总和 for n in list2: sum += n num += 1 print(num) print(sum) list2 = ['刘备','张飞'] #拆包,等号左边的变量数量和右边的值要相等 a,b = list2 #a相当于list[0],b相当于list[1] print(a) print(b) list1 = [['刘备', 30], ['张飞', 20]] print(list1[0][0])#第一个列表的第一个成员 print(list1[0][1])#第一个列表的第二个成员 print(list1[1][0]) list1[0][0]='关羽'#修改第一个列表第一个成员为'关羽' list1[1][1]=50 list1[0][1]=10 print(list1) list4 = [[['刘备', 30], ['关羽', 40]],[['刘备', 30], ['关羽', 40]]] list5 = [[[['刘备', 30], ['关羽', 40]],[['刘备', 30], ['关羽', 40]]], [[['刘备', 30], ['关羽', 40]],[['刘备', 30], ['关羽', 40]]]]
练习
元组
相当于只读的list,通过 元组(索引)得到指定成员的值,不能删除/修改/添加
list方法里面只有查询和count能用
公共方法len(),max(),min(),值 in tuple1都适用
元组遍历和拆包
list1 = [1,5,34,23,6] #返回列表中的成员数量 print(len(list1)) #返回列表中最大成员 print(max(list1)) print(min(list1)) #如果指定值在列表里面,条件成立 if 5 in list1: print("5 in list1") #如果指定值不在列表里面,条件成立 if 20 not in list1: print('20 not in list1') #查找列表中是否有刘备,如果有将其删除 list1 = ["张飞", "刘备", "关羽", "刘邦", "刘老二" ,"曹操" ] if '刘备' in list1: list1.remove('刘备') print(list1) #显示列表中最大值 list2 = [3, 5, 67, 2, 34, 12, 5, 11] print(max(list2)) #元组是个只读list,可以通过tuple1[索引]取得成员的值 # 元组的值不能修改,不能添加,不能删除 tuple_1 = ('刘备','关羽','张飞') print(tuple_1[0]) tuple_2 = () tuple_3 =('刘备',)#如果只有一个成员,后面必须写逗号 #元组可以省略括号 tuple_4 =4,5,6 tuple_5 = 'liubei' , tuple_6 = (5,7,10,5) #只能用count方法 print(tuple_1.count('刘备')) print(tuple_6.count(5)) print(max(tuple_6)) if 5 in tuple_6: print('5 in tuple_6')
元组和list的转化
案例
字典
用大括号定义,内部存放键值对,多个键值对用逗号分隔
键是key,值是value,key不重复,key和value用冒号分隔
空的大括号定义空字典
字典的操作
元组遍历 tuple1 = ('刘备','关羽','张飞') for n in tuple1: print(n) #元组拆包 a, b ,c = tuple1 print(a) list1 = [1,3,5,7] #list1转化为tuple1,list1本身没有改变仍然存在,修改list1,tuple值不变 tuple1 = tuple(list1) print(tuple1) #tuple转化为list,list值可以改变,tuple不变 list1[0]=100 print(tuple1) tuple2 =(4,5) list2 = list(tuple2) print(list2) list2[0]=1000 print(list2) # 把元组中的具体成员放到list后面,这样list1有5个成员 list1 = ["刘备","关羽","张飞"] tuple1 = ("曹操", "周瑜") list1.extend(tuple1) print(list1) # 把元组做为一个完整的成员,放到list后面,这样list1有4个成员,最后一个成员是元组 list1 = ["刘备","关羽","张飞"] tuple1 = ("曹操", "周瑜") list1.append(tuple1) print(list1) dict1 = {'姓名':'刘备','性别':'男','年龄':24} #同一个字典,key不能重复 dict2 = {}
如果键不存在,代表添加
如果已存在,代表修改
添加/修改--字典[键]='值'
删除--pop(键)clear()
查找指定键对应的值--字典[键]
课堂练习
遍历字典
拆包方式遍历字典
dict1 = {'姓名':'刘备','性别':'男','年龄':24} #同一个字典,key不能重复 #添加键值对,key为班级,value为1班 dict1['班级']='1班' #修改键对应的值 dict1['姓名']='张三' print(dict1) dict1.pop('班级')#删除键班级和键对应的值 dict1.clear()#删除所有键和值 print(dict1['性别'])#显示键性别对应的值 dict1 = {'name':'周瑜','age':32,'id':'003'} # 字典中增加一个键值对sex:男 # 删除键id # 把键age的值改为26 dict1['sex'] = '男' dict1.pop('id') dict1['age']=26 print(dict1) for n in 字典: 循环代码 dict1 = {'姓名':'刘备','性别':'男','年龄':24} for n in dict1: print(n,end=" ")#遍历得到键 print(dict1[n])#遍历得到值 #两张写法的结果相同 print(n,dict1[n])#遍历得到键和值 for a,b in dict1.items(): • a,b就是对应的键和值
练习
字符串
如果字符串中有单引号,那么字符串就用双引号引起来
如果有双引号,字符串就用单引号引起来
如果字符串中,既有单引号又有双引号,用转义字符
字符串索引
遍历字符串
字符串常用方法
dict1 = {'姓名':'刘备','性别':'男','年龄':24} #遍历时候使用items(),那么n是一个包含键和值的元组 for n in dict1.items(): print(n) #对n拆包 for n in dict1.items(): a, b = n print(a,b) #在循环的开始直接拆包(省略了步骤n) for a , b in dict1.items(): print(a,b) dict2 = {'a':23,'b':4,'c':9,'d':3,'e':12} #传统遍历方法 for n in dict2: print(n,dict2[n]) # 拆包遍历 for a,b in dict2.items(): print(a,b) str1 = 'aaaaa"bbbbbbb' str2 = "aaaaa'bbbbbbb" str3 = 'aaaaa"bbbbbbb' str4 = "aaaaa'bbbbbbb" str5 = 'aaaaa'bbbb"bbb' str1 = 'abcdefg' print(str1[0]) print(str1[-1]) #str1[0]=1#不能通过下标修改字符串的字符 #print([str1[11]])#不能写超出范围的索引,会报错 for n in str1: print(n) #字符串[索引]--得到指定索引位置的字符 str1 = 'abcdef' print(str1[3])
计算器完善代码
字符串.isalpha()--判断字符串是否由纯字母构成 if str1.isalpha(): print('all character') else:print('not all') #字符串.isdigit()--判断字符串是否由纯数字构成 str2 = '121332' if str2.isdigit(): print('all digits') else:print('not all digits') #find(子串)--查找子串在字符串中的位置 #找不到返回-1 str3='我爱python' a = str3.find('py') print(a) #replace('子串','新子串')--旧字串替换为新字串 #str3本身不改变,str4是改变后的结果 str4 = str3.replace('python','fnd') print(str4) #拆分字符串--split("") #拆分的结果是list str1 = 'aaa_bbb_ccc' list1 = str1.split('_') print(list1) # 通过input输入一个字符换,判断字符换是否可以转化为整数 str1 = input("请输入一个整数") if not str1.isdigit(): print("请输入数字") # 把字符串中的空格去掉 str1 = "明日复明日 明日何其多 我生待明日 万事成蹉跎" str2 = str1.replace(" ", "") print(str2) a = input("请输入一个整数:") b = input("请输入一个整数:") o = input("请输入+-/😊 if a.isdigit() and b.isdigit(): if o == '+': print(a+b) elif o =='-': print(a-b) elif o =='': print(ab) elif o == '/': if b != 0: print(a/b) else:print("除数不能为0") else:print("请输入+-/!!!") else:
切片
从一个大的字符串中切出小的字符串
字符串,元组,列表都能切片
案例
函数的作用是,把一些重复使用的代码,封装到一个函数里面
执行代码的时候,就不用再次写了,直接调用函数即可
使用步骤:先定义再调用
函数的定义和调用
print("请输入整数") 字符串[开始索引:结束索引:步长] 左闭右开--步长默认为1,1可省略 第一个字符索引为0,最后一个索引为-1 步长的正数代表从左往右,负数代表从右往左 从第一个开始切,开始索引可以省略;切到最后一个,最后索引可省略 str1 = '我爱python' str2 = str1[:-1]#从第一个字符开始,到最后,但不包含最后 str3 = str1[:]#从开始到结束,包含所有字符 str4 = str1[::2]#从开始到结束,步长为2 str5 = str1[2:4]#从索引2开始,到索引4结束,但不包含索引4 str6 = str1[:4]#从第一个开始,到索引为4,但不包含4 str7 = str1[2:]#从第二个开始 str8 = str1[::-1]#逆置 str9 = str1[::-2]#逆置,从右往左,步长为2 list1 = ['我爱python','我爱测试','今天学习'] list1[1]=list1[1][::-1]#把第二个成员逆置后,再赋值给第二个成员 print(list1) def 函数名(参数1,参数2,,): 函数封装的代码 #函数名的命名规则和变量一致 函数名(实参1,实参2,,,)
无参
有参
函数的参数
形参
实参
函数的返回值
在设计函数的时候,有些函数并不是要显示什么,只是要返回给调用者一个值
eg,len和max这些函数都是不显示任何结果,只是返回一个值
def my_func(): print(""20) my_func() def my_func2(num1): # print(""num1)#与使用下面的while语句结果相同 while num1>=0: print("*",end="") num1 -= 1 my_func2(4) 定义函数的时候括号里写的参数 形参必须是变量 定义函数的时候,形参没有值 调用函数的时候实参会把值传递给形参 调用函数的时候括号里写的参数 实参可以是变量,常量和表达式 def my_sum(): # 函数的定义,函数一旦定义完成就不要修改封装的代码了 a = 2 b = 5 print(a+b) print() def my_sum(a,b): print(a+b) my_sum(5,6) #实参是常量 num1 = 3 num2 = 4 my_sum(num1,num2) #实参是变量 my_sum(3+4,num1+num2) # 实参是表达式python
return关键字
函数遇到return就终止,return后面的代码不会被执行
函数返回值存在的意义
1.函数如果写死了,就是print显示一个具体的值,那么这个函数的功能是单一的,如果需求发生改变,必然要
修改函数已经封装好的代码
2.如果函数通过return把值返回给调用者,那么函数就相对比较灵活,不会因为需求改变而修改函数内部的
代码
实现一个len函数,叫my_len
list1 = [3,5,6] len(list1) a = len(list1) print(a) print(len(list1)) print(max(list1)) def my_sum(num1,num2): result = num1+num2 print(result)#不带返回值,直接输出 my_sum(1,2) def my_sum2(num1,num2): result = num1 + num2 return result#返回值 a = my_sum2(1,2)#返回结果需要存放在变量里面,然后进行输出 print(a) def my_max(a,b): if a > b: return a else:return b print(a,b)# 改语句不执行,因为执行到return,程序已经结束 print(my_max(4,5)) def my_len(arg): num = 0 for n in arg: num += 1 return num #集合长度大于5,显示ok,否则不ok; #字符串长度大于10 显示yes,否则no list1 = [3,7,6,4] str1 = 'sadfoidoasufpio' if my_len(list1) > 5: print("ok") else:
一个函数内部又调用了另一个函数
变量的作用域
局部变量
定义:在函数内部定义的变量,只能在函数内部使用
作用:函数内部定义,函数执行完成后,就消失了
不同的函数,可以有同名的局部变量,互不影响
生命周期:
在函数执行时候创建
在函数执行完成后回收
主要用于存放函数内部执行的一些临时数据
全局变量
在函数外部定义的变量,在函数内部和外部都能使用,不推荐使用
定义在函数外部,一般定义在所有函数的上方
一旦全局变量的值改变了,所有用到这个变量的函数,都有效
不能在函数外部使用局部变量
def test1(): print('teset1') def test2(): print('test2') test1() def test3(): print('test3') test2() test3()# 先执行test3-test2-test1 def my_func1(): a = 10 print(a) def my_func2(): a = 5 print(a) #函数内部的两个局部变量a,只是名字相同,但是是不同的变量 my_func1() my_func2() num1 =10#全局变量num def my_num1(): print(num1) def my_num2(): print(num1) my_num1() num1 = 20 # 修改全局变量值 my_num2()
全局变量和局部变量可以重名
global关键字
在函数内部修改一个全局变量的值,修改之前需要用global修饰这个全局变量的名字
如果把一个函数放到print的括号里的含义
用print显示这个函数的返回值
函数一定要有返回值,才能放到print里面显示
函数必须通过return才有返回值
形参的本质是函数内部的局部变量
def my_func1(): a = 10 # a是个局部变量,函数执行完,就消失了 my_func1() # 执行代码,执行完就消失了 print(a) # 不能再函数外部使用局部变量,代码报错 num1 = 1 #全局变量num1 def my_func(): num1 = 10 print(num1) #这里显示局部变量num1的值 my_func() # 输出10 print(num1) # 这里显示全局变量num1的值 输出1 #上面代码出现了两个变量,一个是全局num1,一个是局部num1 num1 = 10 def my_func(): global num1 # 这里不是定义变量,而是说有个全局变量num1 num1 = 0 #由于上面有global,所以这里不是定义局部变量,而是修改全局变量num1的值 my_func() #由于函数内部修改了全局变量num1的值,所以print输出0 print(num1) name = '张三' def my_test1(): global name name = '李四' return name print(my_test1()) def my_func(a): # 形参a,形参也是属于函数内部的局部变量 a += 1 # 这里修改的是局部变量的值 print(a) # 这里显示局部变量的值 def my_func2(a):# 形参a a -= 1 print(a) a = 10 # 全局变量a my_func(a) # 这个a既是全局变量,又是实参,调用函数的时候会把全局变量a的值传递给局部变量 my_func2(a) print(a) # 显示全局变量a的值
形参的值来自于实参
形参的值改变了,不影响实参的值
如果形参类型为列表或字典,形参值改变会影响实参
参数值小结
- 定义函数的时候,形参没有值
- 调用函数的时候,实参会把值传递给形参
- 如果参数类型为数字或字符串,形参的值改变了,不影响实参
- 如果形参类型为列表或字典,形参的值改变了.会影响实参
''' 一共出现三个变量a 一个a是全局变量 一个是my_func的形参,也是函数my_func的局部变量 一个是my_func2的形参,也是函数my_func2的局部变量 输出 11 9 1o ''' def my_func1(a): print(a) my_func1(20) my_func1(2+5) num = 100 my_func1(num1) def my_func2(a):# 形参a a -= 1 # 修改形参的值,这里的修改不会影响实参 num1 = 10 print(my_func2(num1)) # 输出为9 print(num1) #输出10 def my_func1(a): a[0]=10 # 修改形参的值 list1 = [1,2,3] print(list1) my_func1(list1) # list1在这里作为实参 print(list1) def my_func1(a): a['name']='tom' dict1 = {'name':'aaa','age':10,'sex':'男'} print(dict1) my_func1(dict1) # 函数内部修改了形参的值 print(dict1) def my_func1(a): a = 'name'
参数的缺省值
一个函数的形参可以有缺省值,如果调用函数的时候,没有指定相应的实参,形参就用缺省值代替
多个缺省参数的案例
注意:有缺省值的参数要写到没有缺省值参数的后面
def my_func2(a): a[0] = 'name' a = '你好' #字符串 print(a) #全局变量不改变直接输出你好 my_func1(a) #调用my_func1参数类型为字符串和数字,形参的值改变了,不影响实参的值 print(a) #输出你好 a = ['你好'] #列表 print(a[0]) # 你好 my_func2(a) #调用my_func2参数类型为列表或字典,形参的值改变了,会影响实参的值 print(a[0]) # name a = ['你好'] # 列表 print(a[0]) my_func1(a[0]) # 参数类型为列表中的一个成员,成员类型为字符串,所以形参改变,实参不受影响 print(a[0]) # 你好 def my_test2(a): a.clear() list1 = [2,5,3] my_test2(list1) #列表调用函数后,删除列表所有值 print(list1) def 函数名(形参=实参): 函数代码 def my_func1(a,b=100):# 形参b的缺省值为100 print(a,b) my_func1(1,2) #写实参,形参b的值为2 my_func1(1) #没有写第二个参数的值,所以形参b的值是缺省值 def my_func3(a=1,b=2,c = 3):# 形参都有缺省值 print(a,b,c) my_func3() my_func3(100) my_func3(100,200) my_func3(100,200,300) my_func3(100,200,300,400) #报错,参数多了 def my_func2(a = 1, b =2,c =3): print(a,b,c) my_func2(c = 23) my_func2(b = 23) my_func2(a = 23)
lambda
实现匿名函数
可以把特别简单的函数,省略去def定义步骤,直接使用
lambda函数只能返回一个表达式的值,
匿名函数不能直接调用print,因为lambda需要一个表达式
if语句说明
如果if后面的条件成立,返回表达式最左边的值a
如果if后面的条件不成立,返回表达式最右边变量的值b
(4,5)是调用匿名函数时候的实参
def my_func(a,b=100): print(a,b) lambda 形参1,,,n : 函数执行代码 my_sum = lambda a, b : a+b print(my_sum(1,2)) my_sum = lambda a, b=10 : a+b print(my_sum(1)) max = (lambda a,b :a if a > b else b)(4,5) print(max) #a和b是匿名函数形参,(4,5)是调用匿名函数时候的实参 print((lambda a,b:a if a > b else b)(6,7))