8、Python学习笔记--函数

函数和数学意义上的函数概念没有本质上的区别
定义格式:

def  fun_name(args):
'''
函数说明文档
'''
函数体逻辑
[return  表达式]



def fun1(num):
	'''
	这个函数用来返回值为一个list  其元素为num的因子
	ex: a = fun1(10)
	result: a is [1,2,5,10]
	@param:num 要计算的数字 必须整形  
	'''
	l = []
	for x in range (1,num+1):
		if num % x:
			pass
		else:
			l.append(x)
	return l

在一个函数中如果运行逻辑遇到return

则直接终止函数运行

,将return之后的表达结果作为函数的返回值返回,若没有表达式则返回None

当函数中没有明确声明 return 语句 则函数的返回值为None

形式参数 未来参与运算的对象的一个替代表达(例如上述函数中的num)
函数的调用 其本质就是使用函数,调用的结果为函数的返回值
实际参数 在函数调用时传入的和形式参数对应的参与函数中逻辑的真实的对象(例如上述函数中的10)

函数的参数传递形式
传值传递: 函数内部对传入的对象进行修改,不影响原始对象 深复制 是堆层面的复制
引用传递: 函数内部对传入的对象进行修改,会影响原始数据  浅复制  是栈层面的复制 指向的还是同一个实体

可变类型作为函数的参数传入均以引用形式传递,不可变均以传值方式传递。

如果不希望影响原始对象请使用深复制的形式传入参数 例如:fun(copy.deepcopy(l))

import copy
def fun2(l):
	'''
	这个函数为一个list  其元素有序排列
	@param l 是一个数字序列
	'''

	for x in range(len(l)):
		for y in range(len(l)-x-1):
			if l[y] > l[len(l)-x-1]:
				l[y],l[len(l)-x-1] = l[len(l)-x-1],l[y]
	return l

l = [4,5,8,1,5,9,8,5,3]
print(fun2(l))
print(l)
print(fun2(copy.deepcopy(l)))
print(l)

函数三参数形式
必须函数:
我们声明的形式参数和调用时传入的实际参数必须保持数量以及顺序的一致.

def fun(a,b,c):
	print(a,b,c)
	return a + b + c
print(fun(1,5,3))  #必须输入三个参数

默认函数:
在函数声明定义时以 parame=defaultvalue 的形式定义的参数被称之为默认函数,该参数在调用时可以不传入,当不传入时使用默认值参与函数逻辑

def fun_circle_area(r,pi=3.14): #默认pi为3.14
	print('pi:',pi)
	return r**2*pi
print('pi = None', fun_circle_area(4))
print('pi=3',fun_circle_area(4,pi = 3)) 

变长参数:
当我们不知道在调用时需要多少参数的情况下使用,有如下两种形式
元组形式
定义形式参数前加一个*号 例如:※ards 在函数内部使用 args获取传入的参数,传入的参数将以元组形式由args获取。
我们可以使用※加上一个列表或者元组的方式传入,这种情况下列表或者元组的每一个元素将以参数的形式传入

def fun3(*args):
	print(args,type(args))
fun3(1,5,4,8)

def fun2(*args):
'''
这个函数为一个list  其元素有序排列
@param l 是一个数字序列
'''
l = list(args)
for x in range(len(l)):
	for y in range(len(l)-x-1):
		if l[y] > l[len(l)-x-1]:
			l[y],l[len(l)-x-1] = l[len(l)-x-1],l[y]
return l

l = (4,5,8,1,5,9,8,5,3)
print(fun2(*l))

l1 = [4,5,8,1,5,9,8,5,3]
print(l1)
print(fun2(*l1))
print(l1)

字典形式:
定义一个参数可以在前面加上** 例如: ※※kwargs 在函数内部使用 kwargs获取传入的参数 传入的参数将以字典的形式由kwargs获取
实际的参数需要以关键字的形式传入,或者使用**dict的形式传入

def fun4(**kwargs):
	print(kwargs)

fun4(a =1, b =2, c =3 ) #关键值形式调用
fun4(**{'a':1,'b':2,'c':3})#字典形式调用

我们可以以关键字的形式进行参数的传入,避免因参数顺序错位导致参数的传入失败。

def fun5(a,b,c,d,e):
	print(e,d,c,b,a)
fun5(1,2,3,4,5) #必须方式传入
fun5(a=1,d=4,e=5,b=2,c=3) #以关键字的形式将对应的值传递给对应的参数

强制关键字参数: 强制关键字参数必须以关键字形式进行调用,在定义时定义在不定长参数之后。

当多种模式的参数混合使用时, 定义顺序为:必须参数、默认参数、不定长参数、必须关键字参数。

def fun6(a,b,*_,c,d):
	print(a,c,_)
fun6(1,2,5,8,9,7,c=2,d=3)

def fun7(a,b,*,c,d):
	print(a,b)
def fun8(*,c,d='host'):
	print(c,d)
fun8(*='hello')

变量作用域:该变量生效的范围。在python中变量的作用域由大到小一次为:

内建(built_in B )> 全局(globle G)> 函数内闭包外(Encloseing E)> 局部(local L)

内建作用域有python的运行环境决定,全局作用域当前程序文件的内部封装代码(函数、类)之外,

在函数内部的函数之外的作用域为E作用域,函数内部的作用域为局部作用域。

小作用域可以访问外部作用域的内容,但不能修改.大作用域无法直接访问小作用域。

在当前作用域没有声明某个变量,但是需要使用时则向上依次查找,找到即使用并不再向上。若一直到内建都没找到则引发 not defeined

可以使用global关键词声明  变量为全局作用域。
可以使用 nonlocal 关键字声明  变量为E作用域中的

变量(只能在闭包函数之外使用)。
可以使用globals函数查看全局作用域的变量列表
可以使用locals函数查看当前作用域中的变量列表

abs   #内建作用域
ab = 12  #全局作用域
def f():
	print(ab)    
	a = 1   #闭包外作用域
	print('a_start',a)
	def f1():
		global ab
		nonlocal a
		a = a * ab
		ab = ab * 5
		print(ab,a)
		b = 3  #局部作用域
	f1()
	print(globals())
	print(locals())
f()
print(ab)

匿名函数:
(lambda表达式): Python中的匿名函数主要用来处理一些简单表达式的封装
使用lambda关键字
一般格式为: var = lambda args:表达式
例如:

f = lambda x,y:x*y
print(f(1,3))

该函数的调用结果为  冒号后紧跟的表达式所表示的结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值