format内置函数的使用
print(format(10,"20"))#数值型默认右对齐 print(format("hellow","20"))#字符串默认左对齐 print(format("hellow","*<20")) print(format("hellow","*>20")) print(format("hellow","*^20")) print(format(3.1415926,".2f")) print(format(10,"b"))#二进制 print(format(10,"o"))#八进制 print(format(10,"x"))#十六进制
代码结果
10
hellow
hellow**************
**************hellow
*******hellow*******
3.14
1010
12
a
关键字传参
def happy_birthday(name,age): print("祝",name,"生日快乐") print(f"你已经{age}岁") happy_birthday(age=18,name="111") ''' 这是关键字传参,可以调整顺序,但是关键字要和形参名一样 可以和位置参数联用,但是要位置参数在前,关键字参数在后,不然会报错 ''' happy_birthday("123",age=18)
代码结果
祝 111 生日快乐
你已经18岁
祝 123 生日快乐
你已经18岁
函数返回值
def calc(a,b): s=a+b c=a*b return s,c print(calc(10,20)) print(type(calc(10,20))) z,x=calc(10,20) #可以分解赋值 无返回值不能 print(z,x)
代码结果
(30, 200)
<class 'tuple'>
30 200
可变参数
#个数可变的位置参数 def fun(*num): print(type(num)) for item in num: print(item) fun(10,20,30,4) print() fun([10,20,30,40]) print() fun(*[10,20,30,40])#加个*号,可以执行解包操作 print() #个数可变的关键字参数 def fun2(**content): print(type(content)) for key,value in content.items(): print(key,"----->",value) fun2(name="111",age=18) d={'name':"111",'age':18} print() fun2(**d)#以字典为参数要进行系列解包** 不可以fun2(d)会报错
代码结果
<class 'tuple'>
10
20
30
4
<class 'tuple'>
[10, 20, 30, 40]
<class 'tuple'>
10
20
30
40
<class 'dict'>
name -----> 111
age -----> 18
<class 'dict'>
name -----> 111
age -----> 18
匿名函数的使用
#当函数只有一行代码时用来简化 关键字为lambda s=lambda a,b:a+b print(type(s))#<class 'function'> 为函数 print(s(10,20)) print() #正常的列表取值 lst=[10,20,30,44] for i in range(len(lst)): print(lst[i]) print() #使用匿名函数 for i in range(len(lst)): result=lambda x:x[i] #x为形参 print(result(lst)) #lst为实参 #排序 lst2=[ {"name":1,"sorce":90}, {"name":2,"sorce":95}, {"name":3,"sorce":98} ] lst2.sort(key=lambda x:x.get("sorce"),reverse=True) print(lst2)
代码结果
<class 'function'>
30
10
20
30
44
10
20
30
44
[{'name': 3, 'sorce': 98}, {'name': 2, 'sorce': 95}, {'name': 1, 'sorce': 90}]
常见数学函数的使用
print("绝对值:",abs(100),abs(-100),abs(0)) print("商和余数",divmod(13,4),divmod(6,3)) print("最大值:",max(13,98,45),max("hellow")) print("最小值:",min(13,98,45),min("hellow")) print("求和:",sum([1,100,200])) print("x的y次幂:",pow(2,3)) #四舍五入 print(round(3.1415))#只有一个参数,保留整数 print(round(3.1415,3))#第二个参数是保留的位数 print(round(314.14,-1))#第二个参数为-1即对个位进行四舍五入 print(round(314.14,-2))#第二个参数为-2即对十位进行四舍五入,以此类推
代码结果
绝对值: 100 100 0
商和余数 (3, 1) (2, 0)
最大值: 98 w
最小值: 13 e
求和: 301
x的y次幂: 8
3
3.142
310.0
300.0
变量的作用域和位置参数调用需知
''' 函数的形参和调佣时的实参 个数要相同 顺序要相同 可能会导致报错 不然使用关键字传参 '''
''' 函数内多为局部变量 函数外为全局变量 函数内用global去定义变量也为全局变量 当全局变量和局部变量重复时,局部变量优先级更高 '''
迭代器操作函数的作用
#sorted lst=[10,20,11,25,44,56] asc_lst=sorted(lst) desc_lst=sorted(lst,reverse=True) print(lst) print(asc_lst) print(desc_lst) print() #reversed new_lst=reversed(lst) print(type(new_lst)) #<class 'list_reverseiterator'> 不是列表需要转换才能看到 print(list(new_lst)) print() #zip lst2=["a","b","c","d"] lst3=[1,2,3,4,5,6] zipobj=zip(lst2,lst3) print(type(zipobj)) # print(list(zipobj))#[('a', 1), ('b', 2), ('c', 3), ('d', 4)] print() #enumerate enum=enumerate(lst3,1) print(type(enum)) print(tuple(enum))#转为列表也可以 print() #all lst4=[1,"",100] print(all(lst4)) #False print(all(lst))#Ture,全部为Ture才为Ture print() #any print(any(lst4))#一个为ture就为Ture print() #next 找没有被转化的 print(next(zipobj)) print(next(zipobj)) print(next(zipobj)) print(next(zipobj)) print() #filter 按照指定条件进行筛选,第一个参数为函数 def fun(n): return n%2==1 #返回Ture或者Flase print(list(filter(fun,range(10))))#将返回值为Ture的留下,记得转换才能看得见 print() #map def change(x): return x.upper() new_lst2=["hellow","baby","world"] obj2=map(change,new_lst2) print(list(obj2))
代码结果
[10, 20, 11, 25, 44, 56]
[10, 11, 20, 25, 44, 56]
[56, 44, 25, 20, 11, 10]
<class 'list_reverseiterator'>
[56, 44, 25, 11, 20, 10]
<class 'zip'>
<class 'enumerate'>
((1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6))
False
True
True
('a', 1)
('b', 2)
('c', 3)
('d', 4)
[1, 3, 5, 7, 9]
['HELLOW', 'BABY', 'WORLD']
例题
递归函数计算阶乘
def fac(n): if n==1: return 1 else: return n*fac(n-1) n=eval(input("请输入要计算到几的阶乘")) print(f"{n}的阶乘等于{fac(n)}")
代码演示
请输入要计算到几的阶乘5
5的阶乘等于120
斐波拉契数列
#第一项和第二项为1,其他项为前两项的和 def fac(n): if n==1 or n==2: return 1 else: return fac(n-1)+fac(n-2) for i in range(1,10): print("第{1}个的斐波拉契数列的数字为{0}".format(fac(i),i))
代码演示
第1个的斐波拉契数列的数字为1
第2个的斐波拉契数列的数字为1
第3个的斐波拉契数列的数字为2
第4个的斐波拉契数列的数字为3
第5个的斐波拉契数列的数字为5
第6个的斐波拉契数列的数字为8
第7个的斐波拉契数列的数字为13
第8个的斐波拉契数列的数字为21
第9个的斐波拉契数列的数字为34
最大公倍数和最小公约数
def gcd(m,n): if m>n: temp=n else: temp=m for i in range(1,temp+1): if((m%i==0) and (n%i==0)): gcd=i return gcd def lcm(m,n): if m>n: temp=n else: temp=m for i in range(1,temp+1): if((m%i==0) and (n%i==0)): lcm=i result=m*n/lcm return result num1=eval(input("请输入第一个整数")) num2=eval(input("请输入第二个整数")) print(num1,"和",num2,"的最大公约数是",gcd(num1,num2)) print(num1,"和",num2,"的最小公倍数是",lcm(num1,num2))
代码演示
请输入第一个整数20
请输入第二个整数10
20 和 10 的最大公约数是 10
20 和 10 的最小公倍数是 20.0