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)

相关内容

热门资讯

老字号徐州继林“盐豆”又火了 ... 江苏徐州讯(图/文孙宜方)江苏老字号徐州继林食品有限公司马年喜讯频传、喜事连连。 一月中旬,公司生产...
【汉图推荐】万物皆可“霉豆腐”... “街头卖霉豆腐”的老板,应该是近期最火的人设了,一句“不买你别摸啊,我还怎么卖”的经典台词,搭配摊主...
网友分享奶茶杯子妙用2.0版本... 奶茶杯子算是被网友们玩出花来了! 想到以前自己扔掉的奶茶杯子,真的很后悔,感觉自己错过一个亿。 没...
匠心传承四十载,味蕾创新谱华章... 在岭南美食的璀璨星空中,有一颗从顺德乐升起的明星,熠熠生辉四十载。他,就是被业界尊称为“一哥森”的周...
芝麻奶奶荣获“中国餐饮供应链卓... 3月6日,郑州美盛喜来登国际酒店高朋满座、暖意融融,“稳住神 扎住根”——第八届中原餐饮定心力大会暨...