Python----函数
来源:互联网 发布:火车头数据采集器 编辑:程序博客网 时间:2024/06/06 02:07
区分几个概念:
函数式编程:—–>函数,最早的编程思想。
面向过程:—–>函数
面向对象:—–>类class
过程可以理解为没有返回值的函数。但是在Python中,如果定义的函数没有返回值,会默认返回None,所以在Python中过程和函数基本是一致的。
函数返回值:
没有返回值—》返回None。
有返回值—-》返回多个值—》把多个值打包到一个元组中,返回一个元组。
def func1(): """文档介绍""" print('in the func1') return 1,[2,3],(4,5) ###返回一个元组def func2(): '''文档''' print("in the func2") return func1 ##可以返回任何值,返回函数名,则返回该函数的地址。
in the func1(1, [2, 3], (4, 5))in the func2<function func1 at 0x7f31f6eca2f0>
函数参数调用
遵循两个原则:
- 位置参数调用
- 关键字参数调用
两者最好不要混用,减少错误。
如果两种参数混合调用,根据参数顺序,先判断位置参数调用。
记住一个原则:关键字参数不能写在位置参数前面。
def func3(x,y): print(x) print(y)func3(1,x=2)##第一个参数1是位置参数,付给x,第二个参数还是给x,所以x获得多个值,y无值报错。
Original exception was:Traceback (most recent call last): File "/home/justin18chan/PycharmProjects/untitled/function.py", line 23, in <module> func3(1,x=2)TypeError: func3() got multiple values for argument 'x'
- 默认参数
定义函数的时候设置默认参数。
调用函数的时候,默认参数非必须传递,如果传递根据传递值设置,没有传递则根据默认值设置。
def func3(x,y=3):##定义的时候设置默认参数y=3 print(x) print(y)func3(1,x=2)
- 非固定参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数。可以和关键字参数混合使用。
A.*args args是变量名,可以随意取,关键是变量名前加星号
def func3(x,*args):### *args 会把多传入的参数变成一个元组形式。 print(x) print(args)func3(0,[1,2,3])
0([1, 2, 3],)
B.**kwargs 把N个关键字参数,转换成字典的方式。
def func4(name,**kwargs): print(kwargs) print(kwargs['age'])func4(name='zhangziyi',age='28',sex='Female')func4(name='zhangzhiyi',**{'age':28,'sex':'Female'})##可以无参数和关键字参数混用。func4(name='zhangzhiyi',**{'name':'zhangzhiyi','age':28,'sex':'Female'}) ##注意不能有重复的值,字典是唯一的。
{'sex': 'Female', 'age': '28'}28{'sex': 'Female', 'age': 28}28func4(name='zhangzhiyi',**{'name':'zhangzhiyi','age':28,'sex':'Female'})TypeError: func4() got multiple values for keyword argument 'name'
- 局部变量与全局变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
但是,如果要在函数里面强行改写全局变量,可以通过global在函数里面声明变量为全局变量,然后再修改。
name = '胡歌'def test(): global name name = '陈坤' print(name)test()print(name)
陈坤陈坤
name = '胡歌'def test(): #global name name = '陈坤' print(name)test()print(name)
陈坤胡歌
*注意,这里所说的函数内不能修改全局变量,只是针对字符串/数值/元组等简单的变量数据,但是列表/字典/类等复杂的数据结构是可以在函数中的局部变量进行修改的**
list1 = [1,2,3]tuple1 = ('a','b','c')age = 18def reset(): list1[0] = 11 #tuple1[0] = ('aa') age = 38 print(list1) print(tuple1[0]) print(age)reset()print(list1)print(tuple1)print(age)
[11, 2, 3]a38[11, 2, 3]('a', 'b', 'c')18
- 递归
1.函数自己调用自己。
2.必须有一个明确的结束条件。
3.每次进入更深一层递归时,问题规模相比上次递归都应有所减少。
4.递归效率不高,应尽可能减少使用递归。
递归层次过多,会导致栈溢出,(在计算机中,函数是通过栈这种数据结构来实现,每当进入一个函数,栈就会多加一层栈帧,每当函数返回,就会减少一层栈帧,由于栈空间有限,递归次数过多会导致栈溢出。)
5.Python针对递归做了保护机制,限制最多递归层数为999层。
阅读全文
0 0
- python函数
- python 函数
- python 函数
- Python 函数
- python 函数
- PYTHON函数
- python 函数
- Python函数
- python 函数
- Python 函数
- Python 函数
- Python 函数
- python函数
- python函数
- python 函数
- Python 函数
- Python函数
- Python函数
- c++11中线程安全单例模式( Meyers Singleton)
- 空指针异常
- VMware Ubuntu安装详细过程
- JMS--activemq(一)
- 【NOIP2017提高A组冲刺11.8】总结
- Python----函数
- NOIP2009T3 最优贸易
- python语言基于栈实现计算器
- 1013-1016
- 交叉编译zlib
- [11.8]模拟
- 文章标题
- obj + mtl 格式说明
- 解决xib requirs xcode9.0 or later问题