Python第六天——函数

时间:2021-10-15 03:26:34
#定义函数 函数名,见名之意
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()