目录
1.函数定义
def 函数名(参数1, 默认值参数 = 值, *元组参数, **字典参数):
函数体
[return 返回值]
2.函数分类
2.1类方法
#关键字@classmethod和关键字cls
@classmethod
def interest_by(cls, amt):
return cls.inerest_rate * amt
2.2静态方法
#关键字@staticmethod
@staticmethod
def interest_with(amt):
return Accout.inerest_rate * amt
静态方法与类方法很多场景是类似的,调用静态方法和类方法都是通过类名实现,只是静态方法与类的耦合度更加松散。
2.3实例方法
def 方法名(self):
方法体
3.参数分类
名称 | 修饰符 |
值参数 | 无 |
默认值参数 | 无 |
元组参数 | 用 * 修饰 |
字典参数 | 用 ** 修饰 |
4.参数传递方式
由于形参是实参的规范,所以实参的数量和类型需与形参一致。
参数的传递不仅支持按位置从左往右依次传递方式,同时也支持按关键字参数传递方式。
//按关键字参数传递
方法(参数名称1=实参1, 参数名称2=实参2)
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
print("-- This parrot wouldn't", action, end=' ')
print("if you put", voltage, "volts through it.")
print("-- Lovely plumage, the", type)
print("-- It's", state, "!")
该函数接受一个必选参数(voltage
)和三个可选参数(state
, action
和 type
)。该函数可用下列方式调用:
parrot(1000) # 1 positional argument
parrot(voltage=1000) # 1 keyword argument
parrot(voltage=1000000, action='VOOOOOM') # 2 keyword arguments
parrot(action='VOOOOOM', voltage=1000000) # 2 keyword arguments
parrot('a million', 'bereft of life', 'jump') # 3 positional arguments
parrot('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword
5.特殊参数传递方式
默认情况下,参数可以按位置或关键字传递给 Python 函数。为了让代码易读、高效,最好限制参数的传递方式,这样,开发者只需查看函数定义,即可确定参数项是仅按位置、按位置或关键字,还是仅按关键字传递。
/
和 *
是可选的。参数的形式使用/
和 *
来区分仅位置参数和仅关键字参数。仅限位置形参应放在 /
(正斜杠)前,仅限关键字参数应放在*(星号)后面。
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
----------- ---------- ----------
| | |
| Positional or keyword |
| - Keyword only
-- Positional only
6.重写(override)
如果子类方法名与父类方法名相同,而且参数列表也相同,只是方法体不同,那么子类会重写(override)父类的方法。
class Animal(object):
def __init__(self, age, sex=1, weight=0.0):
self.age = age
self.sex = sex
self.__weight = weight
def eat(self):
self.weight += 0.05
print('动物吃...')
class Dog(Animal):
def eat(self):
self.weight += 0.1
print('狗狗吃...')
a1 = Dog(2, 0, 10.0)
a1.eat()
输出结果如下:
狗狗吃...
7.多态
发生多态需两个前提条件:第一,继承——多态发生在子类和父类之间;第二,重写——子类重写了父类的方法。
#几何图形
class Figure:
def draw(self):
print('绘制Figure...')
#椭图形
class Ellipse(Figure):
def draw(self):
print('绘制Ellipse...')
#三角形
class Triangle(Figure):
def draw(self):
print('绘制Triangle...')
f1 = Figure()
f1.draw() #未发生多态
f2 = Ellipse()
f2.draw() #发生多态
f3 = Triangle()
f3.draw() #发生多态
输出结果:
绘制Figure...
绘制Ellipse...
绘制Triangle...
8.嵌套函数
函数还可以定义在另外的函数体中,称为“嵌套函数”。
嵌套函数可以访问外部函数中的变量,而外部函数不可以访问嵌套函数中的变量。
9.Lambda表达式
Lambda表达式本质上是一种匿名函数。
lambda 参数列表: Lambda体
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/python/pythonlang/2736.html