函数的参数

一、函数的参数

1.位置参数和关键字参数

根据调用函数的时候实参的提供方式不同来分类的

1) 位置参数:

以’数据1,数据2,数据3,数据4,…'形式存在,通过位置来和形参一一对应

2) 关键字参数:

以’形参1=数据1,形参2=数据2,形参3=数据3,…'形式存在(交换关键字参数的顺序不影响结果)

注意:
a.位置参数和关键字参数可以一起使用,但是位置参数必须放在关键字参数的前面
b.不管以什么样的形式传参,都必须保证每个参数都有值

def func1(a, b, c):
    print(f'a:{a},b:{b},c:{c}')

func1(10, 20, 30)
func1(a=100, b=200, c=300)
func1(b=20, a=10, c=30)
func1(20, c=10, b=30)

2.参数默认值

在定义函数的时候,可以以’形参名=数据’的方式给参数赋默认值;
调用函数的时候有默认值的参数可以不用传参

注意:定义函数的时候如果有的参数有默认值有的参数没有,没有默认值的参数必须在默认值参数的前面。

def func2(a=1, b=2, c=3):
    print(f'a:{a},b:{b},c:{c}')


func2()
func2(10)
func2(10, 20)
func2(10, 20, 30)
func2(c=100)
案例:定义一个20的阶乘
def factorial(num=20):
    s = 1
    for i in range(1, num + 1):
        s *= i
    print(s)


factorial()

3.参数类型说明

可以让形参在函数整体中使用的时候有相关的代码提示

  1. 没有默认值的参数直接在参数名后面加’: 类型名’
  2. 有默认值的时候的类型就是说明的类型
def func3(str1: str, list2: list):
    pass


func3()

list1 = [
    {'a': 10, 'b': 20},
    {'a': 100, 'b': 'abc'}
]
补充“通过类型注释对变量进行类型说明
c = list1[1]['b']  # type:str
print(c.upper())

4.不定长参数

参数个数不确定

1)带*的不定长参数:

在定义函数的时候在某个参数前加*,就可以让这个参数同时接受多个参数
带*号的不定长参的本质是一个元组,他可以接收到所有的实参会成为这个元组的元素。

注意:
a.带的不定长参数只能用位置参数传参
b.带
的不定长参数前面的定长参数也只能用位置参数传参
c.在带*后面的定长参数只能使用关键字参数传参

2)带**的不定长参数:
定义函数的时候在某个参数前加**,就可以让这个参数同时接收多个实参(只能是关键字参数)
带**的不定长参数本质是一个字典,它接收到的所有的关键字参数会成为这个字典的元素。
案例:定义一个函数求多个数的和
def sum2(*num):
    sum_num = 0
    for i in num:
        sum_num += i
    print(sum_num)
形参列表中如果单独出现一个*,它的目的只是想要在调用这个函数的时候*后面的参数必须使用关键字参数,*前面的参数必须使用位置参数。
def func4(a, *, b):
    pass
*args,**kwargs 存在的目的是为了让这个函数在调用的时候可以足够灵活(既可以使用不定个数位置参数,也可以使用不定个数关键字参数,位置参数和、关键字参数还可以一起使用)
def func5(*args, **kwargs):
    pass

func5(10, 20)
func5(10, 20, 30, 40)
func5(a=100, b=200)
func5(15, 20, a=10, b=20)

二、函数的返回值

1.什么是返回值

返回值就是从函数内部传递到函数外部的数据(每次函数只能传一个数据到函数外部)

1)在函数内部怎么确定函数返回值

在函数体实现函数功能的时候,可以在任何你需要的地方通过return关键字,将需要传递到函数外部的数据作为返回值返回。

return使用方法: return 需要返回的数据
注意
a.return除了可以返回数据,还会提前结束函数(执行函数体的时候只要遇到return这个函数体直接结束)
b.如果执行函数体的时候没有遇到return,这个函数的返回值就是None

2)在函数外部怎么使用函数返回值

使用函数调用表达式的值就是使用函数的返回值(函数调用表达式有结果,这个结果就是这次调用函数的时候获取得的返回值)
返回值能做的事情,函数调用表达式都能做

案例:定义函数求任何两个数的和
def sum2(num1, num2):
    return num1 + num2


a = sum2(55, 100)
print(a * 8)
案例:定义函数求任意两个数的和以及乘积
def sum3(num1, num2):
    return num1 + num2, num1 * num2

b = 0
for i in sum3(9, 9):
    b += i
print(b)

三、变量作用域

根据变量作用域(可使用范围)不同,可以将变量分为全局变量和局部变量两种

1.全局变量

全局变量指的是没有定义在函数或者类中的变量,
全局变量的作用域是从定义开始程序到结束。

a = 10
print(f'在外面使用a:{a}')

for i in range(2):
    print(f'在循环中使用a:{a}')

# x和b都是全局变量

for x in range(3):
    b = 20
    print(f'在循环使用a:{x}{b}')

print(f'在外面使用a:{x}{b}')

2.局部变量

定义在函数中的变量是局部变量,局部变量的作用域是从定义开始到函数结束。(形参是局部变量)

关键字global

如果想要在函数定义一个全局变量或者修改一个全局变量的值,需要在函数中使用这个变量前加global进行说明。

num = 19


def func4():
    global num
    num = 20
    print(f'函数内部使用:{num}')global name
​    name = input('请输入用户名:')

func4()
print(f'函数外部:{num}')
print(f'函数外部:{name}')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值