Python学习笔记 14

函数及其参数

本节主要有:

  • 函数简介,参数默认值
  • 参数的两种传递方式:
    1. 位置参数
    2. 关键字参数
  • 不定长参数:
    1. 位置参数装包
    2. 关键字参数装包
  • 参数的解包( * 和 ** )

Tips:如果不想改变原数据,传递参数时尽量用其副本

# 函数也是一个对象
# 对象是内存中专门用来存储数据的一块区域
# 一切皆对象

# 函数的参数:

def rt ( a ) :
	print( 'zzzz', a )

rt( 3 )

def sum(a,b,c) :
	print(a*b*c)

sum(4,5,8)

# 定义形参时可以指定默值,没有传递对应参数,默认值生效
def fn( a , b=10 , c=20 ) :
	print(a,b,c)


fn(a=1, c=2)
fn(1,2,5)

# 实参的传递方式
# - 位置参数
# 		形参和实参位置一一对应

# - 关键字参数
# 		直接根据参数名传递参数
# 	混合使用时,必须将位置参数写在前面
fn( 3,c=1 ) 

# 传递参数时,解析器不会检查实参的类型,实参可以是任意类型的数据
def p( ) :
	print('hello')

def p1(a) :# a当作一个函数对象的参数
	print('a =', a)
	a( )

p1(p)

def fn1(a) :
	# 在方法中,通过形参修改对象时,会影响到所有指向该对象的变量
	a[0]=100
	print('a=',a)

c = [1,2,3]
fn1(c.copy( ))# 用c的副本传递给a , c不会受到影响
print('c=',c)

fn1(c[ : ])# 用c的切片传递给a , c不会受到影响
print('c=',c)

fn1(c)
print('c=',c)

# 不定长参数
# 在定义函数时,可以在形式参数前加上一个*,
# 		它将会将传递的实参保存到一个元组tuple中(装包)
def fn2(*nums) :
	print('nums =',nums,type(nums))

def fn3(*nums) :
	result = 0
	for n in nums :
		result+=n
	print(result)

fn2(1,2,3,4,5,6)
fn3(1,2,3,4,5,6)

# 可变参数*b不是必须写在最后,但它后面的实参传递时,必须以关键字形式传递
def fn(a,*b,c) :
	print('a =',a)
	print('b =',b)
	print('c =',c)
fn(1,2,3,4,c=5)

# 如果形参开头只写一个*,则所有的实参传递时,必须以关键字形式传递
def fn(*,a,b,c) :
	print('a =',a)
	print('b =',b)
	print('c =',c)
fn(a=1,b=2,c=3)

# *形参只能接收位置参数

# **形参可以接收其他剩余的关键字参数,存储到一个字典中,
# 		字典key是参数的名字,value是参数的值
# **形参只能放在所有参数的最后
def fn3(a,b,**c) :
	print('a =',a)
	print('b =',b)
	print('c =',c)
fn3(1,d=4,b=2,c=3)

# 参数的解包

def fn4(a,b,c) :
	print('a =',a)
	print('b =',b)
	print('c =',c)
# 在传递实参时在序列前加上*,可以对序列进行解包后依次传递参数
t = (4,5,6)
fn4(*t)

# 字典需要用**,字典中的key要与形式参数一一对应,传递的是value
d = { 'a':7 , 'c':8 , 'b':9 }
fn4( **d )

猜你喜欢

转载自blog.csdn.net/weixin_44011689/article/details/89405572