[TOC]
Pytho函数传参方式:
一、位置参数
二、关键字参数
#定义函数时指定形参
def fn2(a , b = 9):
# print('a =' ,a)
# print('b =' ,b)
print(a,"+",b,"=",a+b)
#调用函数时,来传递实参
## 调用函数:
### 一、位置参数
fn2(10,20)
fn2(123,456)
### 二、关键字参数
fn(b=20 , c=2 , a=10)
实参的类型的定义及各种示例
函数在调用时,解析器不会检查实参的类型
def fn3(a,b):
print(a+b)
fn3(123,"456") # 代码中不对传参做判断的话,会出错
实参可以传递任意类型的对象
def fn(a):
print('这是fn')
def fn2(a):
print('a=' ,a)
b = 123
b = True
b = 'hello'
b = None
b = [1,2,3]
fn2(b)
fn2(fn)
在函数中对形参进行重新赋值
传入的实参是变量
- 如果传入的实参是变量,在函数内改变形参的值,函数外的实参变量的值不会改变
def fn4(a):
a = 20
print('a =',a)
b = 10
fn4(b)
print('b =',b)
# 执行结果:
a = 20
b = 10
传参是一个对象
- 如果形参执行的是一个对象,当我们通过形参去修改对象时,会影响到所有指向该对象的变量
def fn4(a):
# a = 20
a[0] = 20
print('a =',a)
# c = 10
c = [1,2,3]
fn4(c)
print('c =',c)
# 执行结果:
a = [20, 2, 3]
c = [20, 2, 3]
传递的实参是可变对象
- 当传递的实参是可变对象时,如果不希望改变其值,可以用
copy()
方法传其副本。(注意:如果实参对象中包含子对象的话,如实参c是c = [[11,12],2,3]
这样的话,仍会改变函数外实参子对象的值( c[0][11,12]
),但不会改变非子对象的值 ( c[1],c[2]))
fn4(c.copy())
或
fn4(c[:])