Python函数
1、函数代码块以 def 关键词开头进行定义
def func(arg1[,arg2,arg3,…,argN]): [expression]#示例(为什么每次def一个函数都是一个不开心的开始呢):
def func(x,y,z=0):
if x > y:
print(“>”)
else:
print(“<”)
if z==1:
return x-y
2、函数参数
必需参数
- 调用函数,必需参数须以正确的顺序传入函数,调用时的数量必须和声明时的一样,不然会出现语法错误:
TypeError: func() missing 1 required positional argument: 'arg'
关键字参数
- 函数调用使用关键字参数来确定传入的参数值,不需要按定义时的顺序
默认参数
- 定义函数时为参数赋值,如果没有传递参数值,则会使用默认值
- 默认参数必须放在最后面
不定长参数
- 函数定义时 *变量名 来存放所有未命名的变量参数,调用时可为空:
def func( arg1, *vartuple ):
3、return语句
不带参数值的return语句返回None
函数返回多个值的时候,是以元组的方式返回,可以对返回的元组进行转换后使用
4、匿名函数
使用 lambda 表达式创建匿名函数:
变量名 = lambda [arg1[,arg2,arg3,…,argN]]:expression
匿名函数拥有自己的命名空间,且不能访问自有参数列表之外的或全局命名空间里的参数。
类(Class)
1、Python中类的概念跟C++ 中基本一样,基本功能:
- 继承:即一个派生类(derived class)继承父类/基类(base class)的字段和方法。
- 方法:类中定义的函数。
- 方法重写:子类对从父类继承的方法进行改写/重构
- 实例化:创建一个类的实例,类的具体对象
- 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
2、关键字 class 定义类
class classname:
def __init__(self): #类的构造函数 __init__()
[expression]def func(self): #类的方法必须有第一个参数 self,代表类的实例
[expression]<statement-1>
.
.
<statement-N>
3、类对象调用
instance.objname 或 instance.func()
4、类的继承
class SonClassName(BaseClassName1):
#父类在另一个模块中时:
class SonClassName(modname.BaseClassName):#多父类继承:
class SonClassName(Base1, Base2, Base3):
5、类的私有属性
- __private_attrs:__开头声明该属性为私有,不能在类的外部被使用或直接访问,在类内部的方法中使用时 self.__private_attrs
- __private_method:__开头声明该方法为私有方法,不能在类的外部调用,在类的内部调用 self.__private_methods
6、类的专有方法:
- __init__ : 构造函数,在生成对象时调用
- __del__ : 析构函数,释放对象时使用
- __call__: 函数调用
- __repr__ : 打印,转换
- __str__: 被打印时调用
- __setitem__ : 按照索引赋值
- __getitem__: 按照索引获取值
- __len__: 获得长度
- __cmp__: 比较运算
- __add__: 加运算 +
- __sub__: 减运算 -
- __mul__: 乘运算 ×
- __div__: 除运算 ÷
- __mod__: 求余运算
- __pow__: 乘方
变量的作用域
1、Python 变量的作用域一共有4种,按查找顺序如下:
- L (Local) 局部作用域 ,定义在函数内部的变量
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域 ,定义在函数外的变量
- B (Built-in) 内建作用域
2、作用域只对模块(module),类(class)以及函数(def、lambda)有效
其它代码块(如 if/elif/else/、try/except、for/while等)没有作用域定义,这这些语句内定义的变量,外部也可以访问
if True:
msg = 'in if block'def func():
msg_func = 'in func block'print(msg)
>>>in if blockprint(msg_func)
>>>NameError: name 'msg_inner' is not defined
3、修改变量作用域
修改函数内部的变量,使用 global 关键字声明
def func():
global variate
修改嵌套函数内的变量,使用nonlocal关键字声明
def func():
i = 1
def innerfun():
nonlocal variate
print(variate)
innerfun()
Comments
Post a Comment