[关闭]
@SuHongjun 2020-11-17T07:37:17.000000Z 字数 1909 阅读 1067

Python-Day 12:函数--基础知识1

Python 2020春季学期


函数的定义和调用

  1. def f(): #函数定义
  2. pass
  3. f() #函数调用

形参、实参之1 -- 值传递 or 引用传递

值传递:不可变对象

值传递采用的是拷贝值的方式

  1. def f1( x ): #函数定义,形参 x
  2. x = 2*x
  3. print("f1: x=",x)
  4. return x**3 #函数返回值,用return语句
  5. a = 5
  6. print( 'a=',a )
  7. y = f1( a ) #函数调用 ,实参a,值传递
  8. print( 'y=',y )
  9. print( 'a=',a )

输出为:
a= 5
f1: x= 10
y= 1000
a= 5

引用传递: 可变对象

  1. def f2( x ): #函数定义,形参 x
  2. x.add(9)
  3. s1 = set([1,2,3])
  4. print(s1)
  5. f2(s1) #函数调用 ,实参s1,引用传递
  6. print(s1)

输出为:
{1, 2, 3}
{1, 2, 3, 9}

Python 中,根据实际参数的类型不同,函数参数的传递方式可分为 2 种,分别为值传递和引用(地址)传递:
值传递:适用于实参类型为不可变类型(字符串、数字、元组);
引用(地址)传递:适用于实参类型为可变类型(列表,字典, 集合);

形参、实参之2 -- 5种参数:

1. 位置参数(必选参数)
2. 默认参数
3. 可变参数
4. 命名关键字参数
5. 关键字参数

在Python中定义函数,可以用必选参数、默认参数、可变参数、命名关键字参数和关键字参数,这5种参数可以组合使用。
注意:
参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数、关键字参数。

位置参数:

  1. def f1( x1 , x2): #x1,x2都是位置参数
  2. return x1 + x2
  3. y = f1( 6 , 7) #因为有2个位置形参,这里必须传2个实参
  4. print(y)

默认参数:

  1. def f1( x1 , x2=0): #x2是默认参数
  2. return x1 + x2
  3. y = f1( 6 ) #因为x2是默认参数,所以这里可以传1个实参,也可以传 2个实参
  4. print(y)

可变参数:

标志: *

  1. def f1( x1, x2 = 0, *ls1): #ls1是可变参数
  2. a = 0
  3. for i in ls1:
  4. a += i
  5. return x1 + x2 + a
  6. y = f1( 5,8,2,3,4,5,6,7,8,9,2,43,123,45) # 2,3,4,5,6,7,8,9,2,43,123,45都是传给可变参数 ls1
  7. print(y)

注意:可变参数的标志 * 是区分参数类型的分界点, * 之前的参数是位置参数、默认参数, * 之后的参数是命名关键字参数、关键字参数,

命名关键字参数:

例1:

  1. def f1( x1, x2 = 0, *ls1, p1 = 1): #p1就是命名关键字参数
  2. a = 0
  3. for i in ls1:
  4. a += i
  5. return (x1 + x2 + a) * p1
  6. #y = f1( 5 )
  7. y = f1( 5 ,4,p1=7)
  8. #因为p1参数有缺省值,所以调用的时候可以省略,如果要给p1传参则必须用 p1 = x 的形式给出实参
  9. print(y)

输出:
63

例2:

  1. def person(name, age, *, city, job): #*后面的city、job都是命名关键字参数
  2. print(name, age, city, job)
  3. person('bbj',23,city='hefei',job='engineer')
  4. #命名关键字参数,在调用的时候与位置参数不同的是必须给出参数名否则调用时会报错

输出:
bbj 23 hefei engineer

关键字参数:

标志:**

  1. def person(name, age, **kw): #**kw是关键字参数
  2. print('name:', name, ',age:', age, ',other:', kw)
  3. person('Michael', 30)
  4. dictArray = {'city': 'Beijing', 'job': 'Engineer'} #定义一个字典数据
  5. person('Jack', 24, **dictArray ) #用字典作为参数来调用函数
  6. person("李明",23,city="hefei",habit="basketball") #注意这里的实参 city="hefei",habit="basketball"

输出结果:
name: Michael ,age: 30 ,other: {}
name: Jack ,age: 24 ,other: {'city': 'Beijing', 'job': 'Engineer'}
name: 李明 ,age: 23 ,other: {'city': 'hefei', 'habit': 'basketball'}

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注