模块函数指的是模块中的函数,模块函数有三种:python
导入方法主要有三种:函数
import math math.e
alias表示别名.工具
从模块导入函数.3d
与上一种相似,加上了别名.code
使用关键字def定义:对象
def func(): print(1)
docstring就是注释,描述了函数的功能,使用三个单引号或三个双引号,能够用help()获取函数的docstring.blog
def func(): ''' func docstring ''' print(1) help(func)
直接使用函数名便可,须要的话要加上参数.图片
func() func(22)
返回值在return里指定,能够返回多个值:string
def f(): return 1,2,3,4
至关于返回一个元组.若函数没有return,则返回None.io
形参就是函数定义时的参数列表里面的参数,能够分为:
def f(x1,x2,x3=3)
其中x1,x2必选形参,x3可选形参.
带一个 * 的形参表示该形参类型为元组,带两个 * 的形参表示该参数类型为字典.
出如今*后的参数.
def f(x1,*x2,x3,x4)
x3与x4就是命名关键字参数,在调用时必须显式使用参数名.
python实参能够分为位置实参与关键字实参.
位置参数就是没有指定形参名字的实参,每一个实参基于顺序关联到一个形参.
关键字参数就是指定了形参名字的实参,用键值对的形式指定,能够不按顺序调用.
def f(x1,x2,x3): print(x1,x2,x3) f(1,2,3) f(x3=999,x1=888,x2=999999)
python变量的可见性有三种:全局变量,局部变量,非局部变量.
在函数内的变量为局部变量,所以,如下代码会输出9:
x1 = 8 def f(): x1 = 9 print(x1) f()
若是在x1以前输出呢?
直接提示没有定义x1,就是全局变量x1在函数内不可见,但笔者不死心,必定要运行一下.
它说局部变量x1没有被赋值,注意,是局部变量,所以,这也证实了全局变量在函数内不可见.
若要使全局变量在函数内可见,使用global:
x1 = 8 def f(): global x1 print(x1) x1 = 9 print(x1) f()
global x1表示x1是一个全局变量,注意global x1须要单独占一行.
用于嵌套函数中,使用nonlocal声明,表示内层函数的这个变量是外层函数的.
x1 = 8 def f(): x1 = 9 print(x1) def f1(): nonlocal x1 print(x1) x1 = 10 print(x1) return f1 f() f()()
第一个与第二个9都是f()中的print()输出的,第三个9是f1()中的print()输出的.
当实参传递给形参时,有两种传递规则,一是值传递,而是地址传递.
当实参为不可变对象时,采用值传递规则,常见的不可变对象类型包括int,float,str,bool,tuple.
def f(x): x = 1 print(x) x = 3 print('-------int------') f(x) print(x) print() x = 'string' print('-------str------') f(x) print(x) print() x = (3,4,5) print('-------tuple------') f(x) print(x) print() x = 5.799 print('-------float------') f(x) print(x) print()
参数为可变对象时,采用地址传递规则,修改形参的值会同时改变实参的值.常见的可变对象类型包括list,set,dict.
def f(x): if type(x) == list: x = x.reverse() elif isinstance(x,set): x.add(8) else: x['0'] = 3 x = [1,2,3] print('-------list------') print(x) f(x) print(x) print() x = {4,5,6} print('-------set------') print(x) f(x) print(x) print() x = {'a':1,'b':2} print('-------dict------') print(x) f(x) print(x) print()
lambda是一种特殊的自定义函数,使用关键字lambda进行定义,是一种匿名函数,函数体通常很短.
以关键字lambda开头,后面是参数列表,参数列表结束后加一个冒号,后面是返回值.
y = lambda x:x*3 z = lambda x,y:x*y
调用能够经过"函数名"调用,或者配合其余函数使用.