盏茶python 函数

本节我们将要讲解python的函数部分,主要包括函数的三要素,形参实参及面向过程面向对象的内容。

1.函数定义及调用

1.1 函数定义

函数可以看作一个白箱子,包括输入、处理、输出三个过程,包含三个要素,参数,参数体、返回值。

函数形式:

def 函数名(参数):

函数体

return 返回值

为什么使用函数

(1)提高代码的复用性(复用功能,封装函数)

(2)将复杂的大问题化解成一系列的小问题(模块化设计)

(3)利用代码的维护和管理

1.2 函数调用

函数调用方式:函数名(参数)

# 顺序代码

a = 10

b = 5

c = 3

d = a + b + c

# 函数代码

def cal(a, b, c):

return a + b + c

a = 10

b = 5

c = 3

d = cal(a, b, c)

2.参数传递

2.1 形参与实参

形参(形式参数):函数定义时的参数,实际上就是变量名

实参(实际参数):函数调用时候的参数,实际上就是变量的值

2.2 位置参数

严格按照位置顺序,用实参对形参进行赋值,一般用在参数比较少的时候,且实参和形参必须一一对应,一个不能多,一个不能少。

def function(a, b, c):

print(c)

function(1, 2, 3)

2.3 关键字参数

打破位置限制,直呼其名的进行值得传递的方式,必须遵守实参与形参数量上一一对应,多数用在参数比较多的场景。

def function(a, b, c):

print(c)

function(b=1, a =2, c=3)

位置参数和关键字参数混合使用,但是位置参数必须放在关键字参数的前面,且不能为同一个形参反复传值。

2.4 默认参数

在定义阶段就给形参赋值,在机器学习库中的方法非常常见,在调用函数时,可以不对该形参传值,也可以按照正常的形参传值。

注意:位置形参必须在默认形参前面,默认参数应该设置为不可变类型(数字、字符串、元组)

def function(a, b, c=6):

print(c)

function(b=1, a =2, c=3)

让参数变为可选的方式,采用None的赋值方式

def function(a, b, c=None):

if c:

print(c)

else:

print(a)

function(b=1, a =2, c=3)

function(b=1, a =2)

2.5 可变长参数*args

有时不确定会传递多少,使用参数*args,该形参必须放在参数列表的最后

def fun(x, y, z, *args):

print(x, y, z)

print(args)

# 多余的参数,打包传递给args

fun(1, 2, 3, 4, 5, 6)

# 实参打散

fun(1, 2, 3, [4, 5, 6])

fun(1, 2, 3, *[4, 5, 6])

2.6 可变长参数**kwargs

有时不确定会传递多少,使用参数**kwargs,该形参必须放在参数列表的最后

def fun(x, y, z, **kwargs):

print(x, y, z)

print(kwargs)

# 多余的参数,以字典的形式打包传递给kwargs

fun(1, 2, 3, a=4, b=5, c=6)

# 字典实参打散

fun(1, 2, 3, **{”a“=4, "b"=5, "c"=6})

2.7 可变长参数组合使用

同时使用*args和**kwargs

def fun(*args, **kwargs):

print(args)

print(kwargs)

fun(1, 2, 3, a=4, b=5, c=6)

3.函数体与变量作用域

函数体是只当函数被调用时,才会执行代码,代码构成与其他代码相同。

局部变量:仅在函数体内定义和发挥作用

全局变量:外部定义的变量,在函数体内可以直接被使用,可以通过global在函数体内定义全局变量

4.返回值

返回值通常使用return进行单个返回值的过程,多个返回值以元组的形式进行返回,函数内可以存在多个return语句,一旦其中一个执行,就代表函数结束运行,无return语句,返回值为None

5.断言

单元测试过程中,可以使用assert进行断言进行,当表达式结果为False的时候触发异常。

assert expression

6.匿名函数

基本形式

lambda 参数:函数返回值

匿名函数用法在参数列表中常用,尤其与key进行搭配

ls = [(93, 88), (79, 100), (65, 58), (21, 33), (45, 75)]

ls.sort()

ls.sort(key = lambda x: x[1])

ls.sort(key = lambda x: x[0] + x[1])

7.面向过程和面向对象

面向过程:以过程为中心的编程思想,以”什么正在发生“为主要目标进行编程。

面向对象:将现实世界的目标抽象成对象,更关注”谁在受影响“,更加贴近现实。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200204A0EH1N00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券