Python3中函数基础

函数是对功能或者动作的封装,它的主要目的是:最大化代码重用和最小化代码冗余,以及对复杂过程的分解。

1:函数的定义与调用

在Python中使用如下的语法进行定义一个函数:

def name(arg1,arg2,... argN):
	statements
	return value

def语句是一条可执行的语句,当它运行的时候,会创建一个新的函数对象。并将它赋值给一个变量名(也就是函数名)。

def  add(a,b): # 代码执行到这里时,创建了一个函数对象,并把它赋值给add
	print('a=',a,' b=',b)
	return a+b


# 函数调用:
print(add(1,3))
print(add('1','3'))
print(add([1,2,3,4],['abc','ert']))

2:函数的返回值

在Python中每个函数都有一个返回值,如果自己没有显式返回,函数默认返回None,其中函数返回值可以是任意类型的单个值,可以是任意类型的多个值。

# 1:返回默认值 None
def print_msg(s):
	print(f'hello {s}')

ret = print_msg(111)
print(ret)  # None


# 2:返回单个值
def  add(a,b): # 代码执行到这里时,创建了一个函数对象,并把它赋值给add
	print('a=',a,' b=',b)
	return a+b
ret = add(1,3)
print(ret) # 返回4

ret = add('hello','ixusy88')
print(ret) # 返回 helloixusy88

# 3:返回多个值
def  add(a,b): # 代码执行到这里时,创建了一个函数对象,并把它赋值给add
	print('a=',a,' b=',b)
	return a,b,a+b     # 返回元组;也可以返回列表等其他类型数据
ret = add(1,3)
print(ret) # 返回4

ret = add('hello','ixusy88')
print(ret) # 返回 ('hello', 'ixusy88', 'helloixusy88')

# 也可以 使用序列赋值:
a,b,ret = add('hello','ixusy88')
print(a,b,ret ) # 输出:hello ixusy88 helloixusy88

3:形参和实参

形参:在函数声明的位置。 给出来的参数叫形参。 形式上的一个参数. 用一个变量来表示;
形参的分类
1. 位置参数 按照位置来声明形参
2. 默认值参数, 当给参数传递值的时候,默认值不起作用; 不给值,默认值起作用.;保证你至少有个值能用
顺序: 位置参数必须放在前面。 默认值参数必须放在后面

实参:在函数调用的时候,把实参的值赋值给形参的过程叫传参;在函数调用的地方给出的具体的值叫实参. 实际参数;
实参的分类:
1. 位置参数.:按照位置, 给形参赋值;
2. 关键字参数:按照形参的名字给参数赋值;
3. 混合参数,:位置参数必须放在前面, 关键字参数放后面;

# 形参,定义函数的时候的参数:位置参数必须放在前面,默认值参数必须放在后面
def show_msg(name,age,sex='男'):
	msg = f'name is {name}, age is {age},sex is {sex}. '
	print(msg)


# 实参:调用函数的时候,实际给函数传递的值。
# 位置参数:按照定义的位置传递
show_msg('ixusy88',18)

# 关键字参数:使用默认值
show_msg(name='hahha',age=38)
# 关键字参数:不使用默认值
show_msg(name='hahha',age=38,sex='女')

# 混合参数:位置参数必须放在前面, 关键字参数放后面;
show_msg('混合参数hahha',age=38,sex='女')

4:参数传递

在Python中参数的传递其实就是赋值操作,是变量名给变量名赋值(即通过对象引用),其结果就是两个变量指向了相同的对象:

# 不可变对象:
def func(a):
	a = 200 # 这个的修改不会影响到外部
	print('0-----:',id(a),a)
s = 100

func(s)
print('1-----:',id(s),s)

"""
输出结果:
0-----: 1775928288 200
1-----: 1775925088 100
"""
print('*'*60)

# 可变对象:
def func_2(a):
	a[0] = 100 # 这里的修改会影响到外部的变量,因为两者都指向一个可变数据类型。
	print('0-----:',id(a),a)
 
lst = [1,2,3]
print('1-----:',id(lst),lst)
func_2(lst)
print('2-----:',id(lst),lst)


"""
1-----: 2036762659272 [1, 2, 3]
0-----: 2036762659272 [100, 2, 3]
2-----: 2036762659272 [100, 2, 3]
"""

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章