python[函数]学习记录
2017-11-05 17:20
423 查看
11-05
局部变量
变量的作用域是它被定义的块,从定义它们名字的定义点开始。x=50 def func(x): print('x is',x) x=2 print('Changed local x to',x) func(x) print('x is still',x)
输出的结果为:
x is 50
Changed local x to 2
x is still 50
它是如何工作的:
调用函数时,第一个print,x接收到的是函数声明之上的主代码模块中的值
第二个print,在函数内,x被赋予值2,所以打印出来2。
函数之后,第三个print,展示的仍然是主代码模块中的值,不受函数中x值的变化的影响。
global语句
x=50 def func(): global x print('x is',x) x=2 print('Changed global x to',x) func() print('Value of x is',x)
输出的结果为:
x is 50
Changed global x to 2
Value of x is 2
它是如何工作的:
可以看到,跟上个运行结果的不同就是,最后在主模块中调用的print得出的x,竟然收到了函数的影响。所以global的作用就是把变量变为全局变量,这就是跟local区别的地方。
默认参数值
有时候我们需要为一些方法的参数提供默认值并让它可选,以避免用户不想为它们提供值的情况。可以定义函数时,采用赋值运算符
=来为参数提供默认值。
要注意的是默认参数值应该是常数,确切来说应该是不可变的,以后会解释。
#默认参数值 def say(message,times=1): print(message*times) say('hello') say('world',5)
运送结果是:
hello
worldworldworldworldworld
注意,只有那些位于参数列表末尾的参数才能被赋予参数默认值。
这是因为值是按照参数所处的位置依次分配的。系统会搞不清楚哪个值分配给哪个参数。
关键字参数
如果一个函数有很多参数,又希望只对其中的一些进行指定,可以通过命名它们来给这些参数赋值,这就是关键字参数(Keywords Arguments),我们使用命名而非位置来指定函数中的参数。
这样做有两个好处:
不再需要考虑参数顺序,函数使用更加容易
可以对那些我们希望赋予的参数赋值,只要其他参数有默认参数值。
def func(a,b=5,c=10): print('a is',a,'b is b',b,'c is',c) func(3,7) func(25,c=24) func(c=50,a=100)
运行结果:
a is 3 b is b 7 c is 10
a is 25 b is b 5 c is 24
a is 100 b is b 5 c is 50
看,怎么样,是不是灵活了很多,方便了很多。
可变参数
有时想要定义的函数里面有任意数量的变量,也就是参数数量是可变的,这时可以使用*来实现。def total(a=5,*numbers,**phonebook): print('a',a) #遍历元组中的所有项目 for single_item in numbers: print('single_item',single_item) #遍历字典中的所有项目 for first_part,second_part in phonebook.items(): print(first_part,second_part) print(total(10,1,2,3,jack=123,lucy=345,jim=567))
得出的结果:
a 10
single_item 1
single_item 2
single_item 3
jack 123
lucy 345
jim 567
None
它是如何工作的:
当你声明一个诸如
*param的星号参数时,从此开始直到结束的所有位置参数(Position Arguments)都被收集到一个名为‘param’的元组(tuple)中。
当你声明一个诸如
**param的双星号参数时,从此开始直至结束的所有关键词参数都将被收集到一个名为‘param’的字典(Dictionary)中。
return语句
retrun语句用于从函数中返回,也就是中断函数。我们也可以选择在中断函数时,从函数返回一个值。
def maximum(x,y): if x>y: return x elif x==y: return "The numbers are equal" else: return y print(maximum(2,9))
运行结果:
9
要注意,
return语句没有搭配任何一个值,则代表着返回
None,
None在python这种是一个特殊类型,表示虚无。
每一个函数在末尾都隐含了一句
return None,除非你自己写了retrun语句,
def some_function(): pass print(some_function())
得出的结果就是:None
python中的
pass用来指示一个没有内容的语句块。
DocStrings
python有个甚是优美的功能称作文档字符串(Docmentation Strings),它能让你更好记录程序,更加易于理解。当程序运行时,我们甚至可以通过一个函数来获取文档。def print_max(x,y): '''打印两个数值中的最大数。 这两个数都应该是整数。 ''' x=int(x) y=int(y) if x>y: print(x,'is maximum'< 4000 /span>) else: print(y,'is maximum') print_max(3,5) print(print_max.__doc__) print(help(print_max))
运行结果:
5 is maximum 打印两个数值中的最大数。 这两个数都应该是整数。 Help on function print_max in module __main__: print_max(x, y) 打印两个数值中的最大数。 这两个数都应该是整数。 None
DocStrings就类似一个帮助文档,把注释按照规定的格式写好后。以后方便自己检索,也方便别人查看。
该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束。 第二行为空行,后跟的第三行开始是任何详细的解释说明。
在此强烈建议你在你所有重要功 能的所有文档字符串中都遵循这一约定。
自动化工具可以以这种方式检索你的程序中的文档。因此,我强烈推荐你为你编写的所有重
要的函数配以文档字符串。
相关文章推荐
- Python学习记录——Python函数及对象
- 流畅的python第五章一等函数学习记录
- python学习1 详细记录python的range()函数用法
- 笨方法学习Python 习题21 函数可以返回东西 ---学习记录
- Dive Into Python 学习记录1-函数/模块导入/字典/列表/元组/字符串分割、连接、格式化/映射list/
- python核心编程学习记录之函数与函数式编程
- 7、Python3 函数学习记录
- python学习错误记录——创建类中初始化函数注意点
- Dive Into Python 学习记录2-自省/info 函数 /str / type /callable 函数
- 笨方法学习Python 习题19 函数和变量 ---学习记录
- Python3.5入门学习记录-函数
- DayDayUP_Python自学记录[6]_函数学习
- Dive Into Python 学习记录3-getattr 介绍/过滤列表/and or/lambda 函数
- python第六天学习记录——面向对象基础
- 【Python】学习笔记十三:函数的参数对应
- 零基础入门学习Python(17)--函数:Python的乐高积木
- Python学习28:类、实例的其它内建函数
- 流畅的python第十四章可迭代的对象,迭代器和生成器学习记录
- python函数参数学习笔记
- Python学习笔记009—函数