python基础--函数,作用域介绍(八)

该博客主要介绍Python基础中的函数和作用域相关内容,属于信息技术领域后端开发方向,能帮助读者了解Python编程里函数的使用及作用域的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 函数,函数也是一个对象
# 	对象是内存中用来存储数据的区域。
# 	函数可以用来保存一些可执行代码,并且在需要的时候对这些代码多次调用。
# 创建函数:
# 	def 函数名():
# 		代码块
def fn():
	print('this is my first function')
# 函数中的代码块不会直接执行,需要调用该函数fn()后才会执行。
print(fn,type(fn))
fn()

# 定义函数求两个数之和,定义函数时指定形参
def sum(num1,num2):
	return int(num1) + int(num2)
# 调用函数时传递实参
print(sum(12,44))

# 求任意三个数的乘积
def mul(a,b,c):
	print(a*b*c)
mul(1,2,3)

# 定义形参时,可以为形参指定默认值
# 指定默认值后,如果传递了参数则默认值无效。如果没有传递参数,就会使用默认值。
# 实参的传递方式,位置参数:就是将对应位置的实参复制给对应位置的形参。
# 第一个实参赋值给第一个形参...

# 关键字参数:可以不按照形参定义的顺序去传递参数,
# 而是根据参数名去传递参数

# 位置参数和关键字参数可以混合使用,但是位置参数必须写在关键字参数前面。

# 函数在调用时,解析器不会检查实参的类型,实参可以传递任意类型的对象。
b = 123
b = True
b = None
b = '123'
print(sum(12,b))

# 在函数中形参进行重新赋值不会影响其他变量
# 如果形参是一个对象,通过形参去修改对象时会影响到所有指向该对象的变量。
def fn4(a):
	a[1] = 11
	print(a)
c = 10
c = [1,2,3]
fn4(c)
print(c)

# 不定长参数,
# 定义函数时,可以在形参前边加上*,这样将会获取所有的实参
# 实参会保存到一个元组中,
def fn2(*a):
	print(a)
fn2(1,2,3)

# 带*号的形参只能有一个,并且可以和其他参数配合使用
def fn3(a,b,*c):
	print(a,b,c)
fn3(1,2,3,4,5,6)

# 可变参数不是必须写在最后,但是带*的参数后的所有参数必须以关键字参数形式传递。 
# c必须使用关键字参数
def fn5(a,*b,c):
	print(a,b,c)
fn5(1,2,3,4,5,c=8)

# 如果第一个参数就是*号开头,后面的参数必须都使用关键字参数
def fn6(*a,b,c):
	print(a,b,c)
fn6(1,2,3,b=4,c=0)

# 形参只接收位置参数,不接受关键字参数
def fn7(*a):
	print(a)
fn7(12)

# **形参可以接收其他的关键字参数,会将这些参数保存在字典中。
# 字典的key就是参数名,value就是参数的值。
# **形参只能有一个,并且必须写在所有参数的最后
def fn8(a,b,**c):
	print(a,b,c)
fn8(a=1,b=2,c=4,d=9,f=8)

# 参数的解包
t = (10,20,30)
def fn(a,b,c):
	print(a,b,c)
# 传递实参时,也可以在序列类型的参数前添加*号,
# 这样会自动将序列中的元素依次作为参数传递,
# 但是要求序列中元素的个数必须个形参的个数一致。
fn(*t)

# 通过**来对字典进行解包操作
d = {'a':100,'b':200,'c':300}
fn(**d)

# 返回值:就是函数执行以后返回的结果
# 可以通过return来指定函数的返回值
# return后面跟什么类型值,就会返回什么类型值,
# 可以返回任意对象,也可以返回一个函数
# return后面的代码都不会被执行
# 如果不写return 或者只写一个return,默认返回None。
def sums(*nums):
	result = 0
	for num in nums:
		result += num
	if result > 10 :
		return result
	else :
		return fn9()
def fn9():
	print('hello')
	return
sums(1,2)

# fn9和fn9()区别
print(fn9) # 只是打印函数对象,没有调用
print(fn9()) # 调用函数

# help() 是python中的内置函数,通过help()函数可以查询函数的用法
# 语法 help(函数对象)
help(print)

# 文档字符串
# 在定义函数时,可以在函数内部编写文档字符串,
# 文档字符串就是函数的说明
# 编写文档字符串时,可以通过help()函数查看函数说明
def fn(a:int,b:bool,c:str):
	'''
		这就是文档字符串,也是就文档注释
	'''
	return 12
 

# 作用域(scope):指变量生效的区域。
# 作用域一共有两种:
# 	全局作用域
# 		全局作用域在程序执行时创建,结束后销毁
# 		所有函数以外的区域都是全局作用域
# 		全局作用域中定义的变量都属于全局变量,全局变量可以在任意位置访问。
# 	函数作用域
# 		函数作用域在函数调用时创建,调用结束销毁
# 		函数每调用一次救护产生一个新的函数作用域
# 		在函数中定义的变量都是局部变量,只能在函数中访问
# 	变量查找
# 		使用变量时,会优先在当前作用域中查找变量,有则直接使用,
# 		如果没有继续在上一级作用域中查找,依次类推,如果全局作用域中也没有找到变量则会报错。
a = 11	 		
def fn():
	# global a # 在函数内部声明全局变量,就可以将其作为全局变量修改。
	a = 1
	print(a)
	def fn2():
		a = 2
		print(a)
	fn2()
fn()


# 命名空间:变量存储的位置,每一个变量都需要存储到指定的命名空间汇总
# 每一个作用域都有一个对应的命名空间
# 全局命名空间用来保存全局变量,函数命令空间用来保存函数中的变量
# 命名空间实际就是一个存储变量的字典。
# 使用locals()获取当前作用域的命名空间
scope = locals()
print(scope)

# 函数内部命名空间
def fn():
	a = 10
	gl = globals() # 在任意位置获取全局作用域的命名空间
	scope = locals()
	print(scope)
fn()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值