我的地盘我做主—玩转Python函数和变量

305 阅读3分钟

今天我们来学习一下函数的定义,变量以及全局变量

如何定义函数

关键字 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”前面

阅读更多

适合Python初学者的笔记总结

Python探究之旅—Python语言的基本认识

来一起愉快的开始Python吧

《我的再生兄弟》—一个带了枷锁的列表

相信自己,没有做不到的,只有想不到的

微信公众号:终端研发部

技术+职场
技术+职场