python的函数

函数入门:
什么是函数;
函数是一个功能是一个行为是一个动作
函数就是一个具有名称的功能代码的集合
一段用来解决某一个问题的代码或者指令,具有名称的集合
为什么使用函数:
减少代码重复
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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值