Python入门基础(章节 六 参数)

本文深入讲解了Python函数中的参数概念,包括形参与实参的区别、参数如何被修改、位置参数、默认参数、可变参数及参数分配等内容,并通过实例演示了每种参数类型的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数

1.1 参数的定义
形参定义:在函数定义的时候用到的参数,没有具体值,只是一个占位符称为形参。
实参:在调用函数的时候输入的值。
在def语句中。位于函数名后面的变量通常称为形参,而调用函数时提供的的值称为实参。
以前接触过c/c++的时候

>>>int f(int a,int b)//自定义函数中括号里的a,b就是形参,它在函数自定义过程中实际并不占内存
...
>>>int main()
>>>{
>>>int m=1,n=2,result;
>>>result=f(m,n);//这里的m,n就是实参
>>>/*
>>>运行过程是:
>>>int a,b;
>>>a=m;
>>>b=n;
>>>即临时创建两个变量a,b,然后将实参的值赋予形参,然后形参按照f函数进行运>>>算。
>>>*/
>>>return 0;
}

在Python里面

>>>def add(a, b) :
...   return a+b
...
>>>if __name__=="__main__"
>>>    x = 2
>>>    y = 3
>>>    print add(x, y)

程序如上,在函数定义中的a,b是形参,函数调用中的x,y是实参


1.2 参数的修改

>>>def a(n):
...    n = 'Jack'
...
>>>name = 'aaa'
>>>a(n)
>>>name
>'Jack'

在a内,将新值赋给参数n,但对name的值没有影响,结果表明这是一个不同的变量。

>>>name ='Jack'
>>>n = 'b'
>>>name = n   #赋值是在一个函数内进行的
>>>name
>b

name的值变了,即函数内部赋值时,函数外部不受影响。参数储存在局部作用域之内。


字符串和元组是不能修改的,但参数为可变结构(如列表)

>>>def change(n):
...    n[0] = 'Jack'
...
>>>names = ['a','b']
>>>change(names)
>['Jack','b']

以上是在函数内修改参数,用了函数调用。如果不用函数调用,修改参数

>>>names = ['a','b']
>>>n = names
>>>n[0] = 'Jack'
>>>name
>['Jack','b']

将同一个列表赋值给两个变量时这两个变量将同时指向这个列表。为了避免这种结果,必须创建列表的副本。对列表进行切片操作时,返回的切片都是副本。如果创建的是整个列表的切片,得到的将是列表的副本。

>>>names = ['a','b']
>>>n = names[:]

n和names包含两个相等但不同的列表。

>>>n == names
>True
>>>n is names
>False

如果修改n的元素,是不会影响names

>>>n[0] = 'c'
>>>n
>['c','b']
>>>names
>['a','b']

总而言之n是副本,修改副本的值是不会影响原始列表names


1.3 位置参数

def addfa(a,b):
    result = 1
    if b >0:
        a+=1
        result = result*b+a
    return result
print (addfa(3,4))

addfa(a,b)里面有两个参数,a和b是位置参数,再调用时按照顺序依次传递给a和b。
位置参数也叫必选参数


1.3 默认参数

默认参数最大的优点在于可以指定默认值,参数作用清晰。

def addfa(a,b=1):
    result = 1
    if b >0:
        a+=1
        result = result*b+a
    return result
print (addfa(3))

第一:必选参数在前,默认参数在后,否则python解释器会报错,在程序当中就是a在前面。

第二:默认参数一定要指向不变对象

如果不懂python在可变和不可变对象,请参考 https://www.jianshu.com/p/c5582e23b26c


1.4 可变参数
定义:在参数前面加了一个*号,函数可以接收0个或多个值作为参数,返回的结果是一个元组。一般默认的参数为*args
*args:将参数组织成元组;

#*args:将参数组织成元组;

def print_params(*args):
    print(args)
>> print_params('Testing')
('Testing', )
>> print_params(1, 2, 3)
(1, 2, 3)
#------------------------------------
#与普通参数的组合使用:

def print_params(title, *args):
    print(title)
    print(args)
>> print_params('Params', 1, 2, 3)
Params
(1, 2, 3)

星号不会收集关键字参数(z=3),要收集关键字参数,可以使用两个星号,一般默认为**kwargs,返回的是一个字典而不是元组

def print_params(x, y, z=3, *parms, **kw):
    print(x, y, z)
    print(params)
    print(kw)
>> print_params(1, 2, 3, 5, 6, 7, foo=1, bar=2)
1 2 3
(5, 6, 7)
{'foo':1, 'bar':2}

1.5 参数的分配

def add(x, y): return x+y
params = (1, 2)

>>> add(*params)
3

通过调用函数时使用运算符实现的,部分位于参数的末尾,通过*可将字典中的值分配给关键字参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值