函数 python

函数的作用

函数就是将一段具有独立功能的代码块整合到一个整体并命名,需要时调用即可。

函数在开发过程中,可以更高效的实现代码重用

函数使用步骤

函数必须先定义,在调用

定义函数

def 函数名(参数):
	代码1
	代码2
	......
	return 返回值

调用函数

函数名(参数)

函数的说明文档

语法

  • 定义函数的说明文档
def 函数名(参数):
	'''
	说明文档位置
	:param a: 参数1
	:param b:参数2
	:return:返回值
	'''
	代码
	.......
	return 返回值
def sum_num(a,b):
	'''
    求和函数
	:param a: 参数1
	:param b: 参数2
	:return:返回值a+b的值
	'''
	return a+b
help(sum_num)

输出:
在这里插入图片描述

函数中修改全局变量

在python的函数中,为用global修饰的均为局部变量

a=100
def testA():
	a=200  	 # 这个a相当于局部变量
def testB():
	global a  # 声明这个a是全局变量
	a=200
testA()
print(a)     # 输出仍为100 
testB()
print(a)	# 输出为200

函数有多个返回值

一个函数要是有多个返回值,可以用return a,b 写法,返回多个数据时,默认为元组类型。
return后面可以接列表、元组、字典,以返回多个值

方法1:直接一起返回
def return_num():
	return 1,2
print(return_num())	# (1, 2)
方法2:封装成列表、元组、字典等返回
def return_num2():
	return [1,2]
print(return_num())	# [1, 2]

函数参数传递方法

  1. 位置参数:就和其他高级语言一样,参数位置,个数均要对应传递
  2. 关键字参数:
    关键字参数通过 键=值 的形式加以指定。可让函数更清晰、容易使用,也清楚了参数的顺序要求。
def user_info(name,age,gender):
	print(f'name={name},age={age},gender={gender}')
user_info('Rose',age=20,gender='女')

注意:函数调用时,如果有位置参数时,位置参数必须在关键字参数前面,但关键字之间不存在先后顺序

  1. 缺省(默认)参数
    缺省参数又叫默认参数,用于定义函数时为参数提供默认值,调用函数时可不传递默认参数值

注意:所有位置参数必须出现在默认参数前,包括函数定义和调用

def user_info(name,age,gender='男'):
	print(f'name={name},age={age},gender={gender}')
user_info('Tom',20)	# name=Tom,age=20,gender=男
  1. 不定长参数
    不定长又叫可变。用于不确定调用的时候会传递多少个参数的场景。此时可以用包裹(packing)位置参数,或包裹关键字参数来进行参数传递。

包裹位置传递

def user_info(*args):
	print(args)
user_info('Tom')	# ('Tom',)
user_info('Tom',19)	# ('Tom', 19)

注意:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组,args是元组类型,这就是包裹位置传递

包裹关键字传递

合并为一个字典类型

def user_info(**kwargs):
	print(kwargs)
user_info(name='Tom',age=20) # {'name': 'Tom', 'age': 20}

综上:无论是包裹位置还是包裹关键字,都是一个组包的过程

拆包

之前提到过,函数有多个返回值时,可以直接一起return,如return 1,2 这些数据会组包成一个元组。还有包裹传递也有组包成元组,组包成字典。所谓拆包就是将这些组合数据拆成单个数据

  • 元组拆包
def return_num():
	return 100,200	# 组包成元组
num1,num2=return_num()	# 拆包成单个数据
print(f'{num1},{num2}')	# 100,200
# 所以元组拆包:
tuple1=(100,200,300,400)
num1,num2,num3,num4=tuple1
  • 字典拆包
dict1 = {'name': 'TOM', 'age': 18}
a, b = dict1
# 对字典进⾏拆包,取出来的是字典的key
print(a) 		# name
print(b) 		# age
print(dict1[a]) # TOM
print(dict1[b]) # 18

引用

了解引用

在python中,值是靠引用来传递的。
我们可以通过id()来判断两个变量是否为同一个值的引用。我们可以将id值理解为那块内存地址的标识

  • 对不可变数据类型
# int类型(不可变数据类型)
a=1
b=a
print(id(a)) # 2727844276528
print(id(b)) # 2727844276528

a=2
print(b)     # 1
print(id(a)) # 2727844276560
print(id(b)) # 2727844276528

分析得出:int类型是不可变类型。a=1时,内存开辟一块int类型大小的空间存放1,a相当于一个指针指向这块内存。b=a则相当于一个名为b的指针指向那块内存。
当a=2时,因为int为不可变类型,不能再原有内存上修改,所以又开辟一块新的内存空间存储2,a指向新的内存空间。但此时b并未发生改变,仍然指向原先内存。

  • 对可变数据类型
# 列表(可变数据类型)
aa=[10,20]
bb=aa
print(id(aa)) # 2569029172480
print(id(bb)) # 2569029172480

aa.append(30) # [10, 20, 30]
print(bb)     # 2569029172480
print(id(aa)) # 2569029172480
print(id(bb)) # 2569029172480

注意:列表为可变类型,aa.apend(30)并未修改aa变量所指向的那块内存空间起始地址。

引用当做实参

当为不可变类型时,如int,计算前后id不一样

def test1(a):
    print(id(a)) # 1951452452304
    a+=a
    print(id(a)) # 1951452455568

b=100
test1(b)
print(id(b))     # 1951452452304

当可变类型时,如list,计算前后id一样

def test1(a):
    print(id(a)) # 1960252161280
    a.append(1)
    print(id(a)) # 1960252161280

b=[1,2]
test1(b)
print(id(b))     # 1960252161280

可变类型和不可变类型

可变类型

  • 列表
  • 字典
  • 集合

不可变类型

  • 整型
  • 浮点型
  • 字符串
  • 元组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值