python的函数

it2025-01-25  39

函数入门: 什么是函数; 函数是一个功能是一个行为是一个动作 函数就是一个具有名称的功能代码的集合 一段用来解决某一个问题的代码或者指令,具有名称的集合 为什么使用函数: 减少代码重复 python如何使用函数: def 函数名称(【参数列表】): #函数体 函数调用: 函数名称(【参数列表】) #函数体 #函数得到一个结果如果调用者需要,则返回 #return 返回值 input也是一个全局函数,该函数;可以接受控制台上用户输入数据 全局函数:print( ) input(),pyte(),int(),float(),str() range的全局函数 range()前闭后开的区间 range(stop)#[,stop) range(start,stop)#[start,stop)从start开始到stop结束 range(start,stop,step)#例如[10,100,5)出来的数从10开始到100结束每个数间隔为5 请简单说明range和xrange的区别 range(1,10)【1,2,3,4,5,6,7,8,9】(会把你输入的数全取出来) xrange(1000000)算法(不会占用很大的内存,只会存少部分数据) round函数,四舍五入(遇见奇数不变,遇见偶数升) 函数的分类: 有无参数:有参函数 无参函数 是否存在返回值:有返回值的函数 无返回值的函数 定义者:系统函数 由第三方函数定义的 自定义的 全局变量在函数中的使用: 全局变量(gloable variable):定义在py文件中 局部变量(local variable):定义在函数或者内部的就是局部变量 在python中,函数内部不允许修改全局变量 在第一行写global(函数名)可以修改全局函数 函数调用的本质(内存模型): 函数在python中存在堆内存中 函数在python中本质就是一个对象 函数的调用就做压栈,调用完要立即出栈 函数的参数问题 默认值: 默认值参数: 在函数定义时,如果一些参数的值一般是不变的某个值,则可以将它设置为一个固定的值 可变参数: *ages(*代表特殊的函数,*后面的是自己定义的函数名称)是个元组 **ages(关键字参数)字典,在输出函数的时候(name=“狙”,nvdi=“jfk”)等 命名参数 万能参数 *args *ages 函数作为参数传递到函数内部的问题 python中,函数的本质是个对象,python中函数的参数类型是python所有类型都可 结论:在python中函数可以作为参数传递到函数内部去 lambda表达式(匿名函数) lambda x1,x2,x3…:函数体 lambda的作用: 1.在python实现匿名函数 2.简化了编程 缺点: 1.降低了代码的可读性,提高代码的复杂的,提高了代码的维护成本 偏函数和递归 将一个函数的参数修改或者增加默认值 import functools functools.partial(int,base=8)将原来的base=10强制转化为8 递归 函数自身调用自身 函数的作用域和命名空间 1.作用域(scope):变量生效的区域 在Python中一共有两种作用域 全局作用域:(类似于windows中path环境变量) 全局作用域在程序执行时创建,在程序执行结束时销毁 所有函数以外的区域都是全局作用域 在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问 函数作用域: 函数作用域在函数调用时创建,在调用结束时销毁 函数每调用一次就会产生一个新的函数作用域 在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问 变量的查找(类似于windows中环境变量的查找) 当我们使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,如果没有则继续去上一级作用域中寻找,如果有则使用,如果依然没有则继续去上一级作用域中寻找,以此类推 直到找到全局作用域,依然没有找到,则会抛出异常 NameError: name ‘a’ is not defined 命名空间(namespace) 命名空间:变量存储的位置,每一个变量都需要存储到指定的命名空间当中 每一个作用域都会有一个它对应的命名空间 全局命名空间,用来保存全局变量。函数命名空间用来保存函数中的变量 命名空间实际上就是一个字典,是一个专门用来存储变量的字典 locals()用来获取当前作用域的命名空间 如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间,返回的是一个字典,可以通过字典的的修改方式添加或者删除变量。 函数中的参数 1.形参: 定义形参时,可以为形参指定默认值 指定了默认值以后,如果用户传递了参数则默认值没有任何作用 如果用户没有传递,则默认值就会生效 2.实参的传递方式 位置参数 位置参数就是将对应位置的实参复制给对应位置的形参 第一个实参赋值给第一个形参,第二个实参赋值给第二个形参 。。。 fn(1 , 2 , 3) 关键字参数 关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数 fn(b=1 , c=2 , a=3) print(‘hello’ , end=’’) 位置参数和关键字参数可以混合使用 混合使用关键字和位置参数时,必须将位置参数写到前面 fn(1,c=30) 不定长参数: 在定义函数时,可以在形参前边加上一个,这样这个形参将会获取到所有的实参 它将会将所有的实参保存到一个元组中 *a会接受所有的位置实参,并且会将这些实参统一保存到一个元组中(装包) 带星号的形参只能有一个 *形参只能接收位置参数,而不能接收关键字参数 def fn3(*a) : print(‘a =’,a) **形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中 字典的key就是参数的名字,字典的value就是参数的值 **形参只能有一个,并且必须写在所有参数的最后 python函数的注意事项 函数参数的类型决定了它的作用范围。 按住外面的容器类作为参数传递到函数中之后,如果函数修改了这个容器里面的值,那么函数外面的容器也会受到影响,但是函数外面的普通变量作为参数传递到函数中,并且函数修改了这个参数是外面的变量不受影响。

最新回复(0)