今天我们来学习一下函数的定义,变量以及全局变量
如何定义函数
关键字 def +方法名 +括号(参数)+冒号:
>>> def main(x):
print("I am a coder");
如何理解?
在上面的main函数中,当包含该函数的模块加载到Python解释器中时,或者如果该函数在Python REPL中定义,那么将会执行函数定义语句def main(x)
函数定义的执行会绑定当前本地命名空间中的函数名(可以将命名空间当作名字到值的一种映射,并且这种映射还可以嵌套)到一个函数对象,该对象是一个对函数中可执行代码的包装器。
这个函数对象包含了一个对当前全局命名空间的引用,而当前命名空间指该函数调用时所使用的全局命名空间。此外,函数定义不会执行函数体,只有在函数被调用时才会执行函数体。
方法的返回值
>>> def mudex(nu1,nu2):
return nu1 * nu2;
>>>mudex(23,5)
>>>115
注意
Python中的函数,无论是命名函数,还是匿名函数,都是语句和表达式的集合。在Python中,函数是第一个类对象,这意味着函数的用法并没有限制。Python函数的使用方式就像Python中其他值一样
例如字符串和数字等。Python函数拥有一些属性,通过使用Python内置函数dir就能查看这些属性,如下代码所示:
def square(x):
return x**2
>>> square
<function square at 0x031AA230>
>>> dir(square)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
>>>
一些重要的函数属性包括以下几个
1、doc返回指定函数的文档字符串。
2、 name返回函数名字。
3、 module返回函数定义所在模块的名字
4、func_defaults返回一个包含默认参数值的元组,默认参数将在后文进行讨论。
5、func_globals返回一个包含函数全局变量的字典引用。
def square(x):
"""return square of given number"""
return x**2
>>> square.func_globals
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'square': <function square at 0x10f099c08>, '__doc__': None, '__package__': None}
6、 func_dict返回支持任意函数属性的命名空间。
7、 func_closure返回一个胞体元组,其中胞体包含了函数自由变量的绑定
可变的参数函数
利用“*” 相当于java 中 的 (String ..params)
def getMyStuBy(* params):
print(params[0]+params[1]+params[2])
“**”定义函数
**kwargs
def show_args(arg, *args, **kwargs):
print arg
for item in args:
print args
for key, value in kwargs:
print key, value
>>> args = [1, 2, 3, 4]
>>> kwargs = dict(name='testing', age=24, year=2014)
>>> show_args("hey", *args, **kwargs)
“*args”参数表示未知的位置参数序列长度
“**kwargs”代表包含关键字和值映射关系的字典
“kwargs”可以包含任意数量的关键字和值映射,并且在函数定义中“*args”必须位于“kwargs”前面
阅读更多
相信自己,没有做不到的,只有想不到的
微信公众号:终端研发部