#定义函数 函数名,见名之意
def fun1(x):
return x*x
def fun2(a,b,c):
print(a+b+c)
fun2(1,2,3)#参数写几个必须给几个
#默认参数
def fun2(a,b,c=10):
print(a+b+c)#默认参数可给可不给,必备参数放在默认参数前面
#关键字参数
fun2(c=6,b=3,a=2)
#不定长参数
def fun3(*arge):#传入未知个数的参数,该不定长参数为元组类型
print(arge)
def fun4(**kwarg):#传入关键字参数,变成字典类型
print(kwarg)
#例子
d = {'a':'python','b':12,'c':[1,2,3]}
fun2(**d)
def fun5(a,b=5,*c,**d):
print(a,b,c,d)
fun5(1,2,3,4,5)#输出 1,2,(3,4,5),{}
fun5(1,4,x=5)#输出 1,4,(),{'x':6}
#函数的参数
#必备参数 默认参数 位置参数 关键字参数 不定长参数
#*arg元组 **kwarg字典
#内置函数
#Python3 表现为紫色的函数
#进制转换函数
bin(10)#转换为二进制 返回str 以0b开头
oct(10)#转换为八进制 返回str 以0o开头
hex(20)#转换为十六进制 返回str 以0x开头
ord('c')#转换为ASCII 返回int
chr(14)#ASCII 转换为字符
#lambda 匿名函数
#关键字 用来创建简单的函数
#例子
def ff(x):
return x*x
#可以改为lambda x:x*x
fx = lambda x:x*x
#以sorted()的key参数为例
li = [(1,4,2),(4,3,1),(6,2,8),(9,8,7)]
#要以列表第二个元素排序
sorted(li,key=lambda x:x[1])
#其中相当于把li当成参数放到lambda中
#作用域
#global 用来声明这是全局变量
#nonlocal 用来声明使用外层变量
a = 5
def f():
b = 12
#X a += b #全局变量不能再局部函数被修改
global a
a += b
return a+b#a是全局变量 b是局部变量
def f1():
a = 10
def f2():
c = 20
#global a # =5
nonlocal a #10
a += c
return a
print(f2())
#调用函数中的函数
#内嵌函数和闭包
#原本的
def fun1(x):
def fun2(y):
return x*y
return fun2(6)
#调用时fun1(3)返回18
#现在
def fun3(x):
def fun4(y):
return x*y
return fun4
#调用时fun3(10)(2)返回 20
#可以用 m = fun3(2) 再用m(3) 返回6
#闭包 存在内嵌函数且外层函数的返回值是内层函数
#递归函数
#阶乘举例
'''
1! = 1
2! = 1*2 =1!*2
3! = 1*2*3 =2!*3
...
n! = 1*2*3*...*n=(n-1!)*n!
'''
def jc(n):
if n == 1:
return 1
else:
return n*jc(n-1)
#回调函数 在某种情况下才会被调用的函数
from tkinter import*
import sys
root =Tk()
root.geometry('400x400+300+100')
def click():
print("我被用了")
Button(root,text='点我',command=click,bg='red').pack(fill=X,expand=1)
Button(root,text='退出',command=sys.exit,bg='blue').pack(fill=X,expand=1)
root.mainloop()