1.7Python语言的函数(Function)

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)和三个可选参数(stateaction 和 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

(0)
上一篇 2020年12月6日 01:04
下一篇 2020年12月8日 00:52

相关推荐

  • 1.1Python语言的三种注释(Comment)

    常规注释 一条注释以不包含在字符串字面值内的井号 (#) 开头,# 后面有一个空格,接着是注释内容。 文档注释 文档注释是一种用于生成API文档的注释,推荐使用三重双引号,不推荐使用三重单引号。 单行文档注释 多行文档注释 文档注释生于内容和结束三重双引号要与开始三重双引号对齐。 编码注释 编码注释是一种特殊的注释,用…

    Python语言教程 2020年12月1日
    01.8K0
  • 1.3Python语言的分隔符(Delimiter)和运算符(Operator)

    分隔符(Delimiter) 句点也可出现于浮点数和虚数字面值中。连续三个句点有表示一个省略符的特殊含义。以上列表的后半部分为增强赋值操作符,在词法中作为分隔符,但也起到运算作用。 以下可打印 ASCII 字符作为其他形符的组成部分时具有特殊含义,或是对词法分析器有重要意义: 以下可打印 ASCII 字符不在 Pyth…

    Python语言教程 2020年12月3日
    02.5K0
  • 1.5Python数据结构之序列(Sequence)、集合(Set)、映射(Mapping)

    序列是一种可迭代的、有序的、可以包含重复元素的数据结构。 不可变(Immutable)序列 不可变序列(Immutable Sequence):字符串(class str)、元组(class tuple)、字节串(class bytes)、范围(class range)。 字符串…

    Python语言教程 2020年12月5日
    01.7K0

发表回复

登录后才能评论