Python(10)函数
admin
2024-04-13 07:33:56

文章目录

  • 创建和调用函数
  • 函数的参数
    • 形式参数和实际参数
    • 关键字参数和位置参数
    • 默认参数
    • 收集参数
    • 变量的解包
  • 函数的返回值
  • 作用域
  • 函数嵌套

函数的主要作用: 打包代码

最大程度实现代码的重用减少冗余代码

将不同代码进行封装、分解从而降低结构复杂度,提高代码可读性

创建和调用函数

# 创建
def my_func():pass# 调用
my_func()

函数的参数

def my_func(name, times):for i in range(times):print(f"我喜欢{name}")my_func(name="python", times=5)

形式参数和实际参数

形式参数(形参)

  • name和times

实际参数(实参)

  • "python"和5

关键字参数和位置参数

我们在传参的时候不仅可以这样

number = div(x=6, y=0)

还可以这样

number = div(6, 0)

那么可以混着用么?

# 这样是可以的
number = div(6, y=0)# 但这样不行
number = div(x=6, 0)

关键字参数必须在,位置参数后面

默认参数

我们可以定义一个求圆面积的函数是这样的

def func(r,pai):print(2*pai*r)

我们都知道 pai 是3.1415926…

那么我们可以不可以让这个参数默认为 3.14 呢,如果需要要精细那么再让用户自己传入.

def func(r, pai=3.14):print(2 * pai * r)# 可以传
# func(3, 3.1415926)# 也可以不传
func(3)

收集参数

有时候我们不知道用户要输入多少参数

例如:print

这时我们就需要使用到我们的收集参数

def func(*args):print(args, type(args))  # (1, 2, 3, 4) func(1, 2, 3, 4)

我们发现,传入这么多值其实用的元组的打包性质

字典形式的收集参数

def func(**kwargs):print(kwargs)  # {'a': 1, 'b': 2, 'c': 3}func(a=1, b=2, c=3)

变量的解包

收集参数就是 打包操作

那么我们 传入的时候还有一个变量解包操作

def func(a, b, c, d):print(a, b, c, d)  # 1 2 3 4f = (1, 2, 3, 4)
g = {'a': 1, "c": 3, "b": 2, "d": 4}
func(*f)
func(**g)

函数的返回值

例如:

  • sum()函数回返回求和后的结果
  • len()函数回返回一个元素的长度

我们需要使用 return 让我们的自定义函数实现返回

实现一个除法的函数

  1. 实现基本的除法
  2. 除数不能为0
def div(x, y):if y == 0:return "除数不能为0"else:return x / ynumber = div(x=6, y=1)print(number)

return后代码将不会在继续向下执行,这样代码就可以简化成

def div(x, y):if y == 0:return "除数不能为0"return x / ynumber = div(x=6, y=1)print(number)

在想想我们学过的三目运算,代码就可以简化成这样

def div(x, y):return x / y if y != 0 else "除数不能为0"number = div(x=6, y=0)print(number)

如果我们不写return 那么函数也会返回一个 None

作用域

变量或函数起作用的范围

全局变量

变量定义的位置不在任何函数中

a = 0   # 全局变量def func():print(a)func()

我们想修改全局变量时,可能不如我们所意

a = 0  # 全局变量def func1():a = 1  # 局部变量print(a)  # 输出的是局部变量 1func1()
print(a)  # 输出的是全局变量 0

我们可以使用 global 从而实现我们修改的目的

a = 0  # 全局变量def func1():global aa = 1print(a)func1()
print(a)

局部变量

def func1():b = 1   # 局部变量def func2():print(b)    # NameError: name 'b' is not definedfunc1()
func2()

函数嵌套

  1. 函数内的函数,无法在外部被调用
  2. 函数内定义的变量,可以使用nonlocal关键字进行修改
def func1(x):print(x)def func2():nonlocal xx = 5print(x)func2()print(x)func1(1)

相关内容

热门资讯

小雪降温,别错过这几道滋补菜,... 小雪降温,别错过这几道滋补菜,孩子一吃就两碗,御寒强免疫 小雪时节天气渐冷,下面分享几道滋补家常菜,...
原创 它... 在探讨美食的海洋中,有一种食物以其独特的魅力,成为了众多男性心中的挚爱。它不仅满足了味蕾的极致享受,...
原创 它... 标题:快餐文化下的童年记忆 在快节奏的现代生活中,快餐以其便捷、快速的特点成为了人们餐桌上的常客。...
从“蟹季限定”到“四季常热” 味觉公路 度假区(阳澄湖镇)供图 □ 本报记者 陈诚 王俊杰 入冬后,阳澄湖畔有了阵阵凉意,苏州“村...
佳木斯市再添新景 四丰山水库打... 本文转自:人民网-黑龙江频道人民网哈尔滨11月19日电 近日,佳木斯四丰山水库再添新景——沿岸休闲步...