python 函数

本文介绍了Python中的函数基础,包括函数的定义、形参和实参的概念,以及返回值的使用。接着探讨了变量的作用域,包括全局变量和局部变量。进一步讲解了函数参数的不同类型,如默认参数、位置参数、命名参数、可变长度参数等。还讨论了匿名函数lambda表达式及其应用场景。最后,深入解析了生成器和yield语句,强调了它们在处理大量数据时节省内存的优势。

python 函数

函数基础

1.函数:一个被封装起来的具有特定功能的代码段,可被重复执行
2.自定义函数:自定义函数通过def关键字定义。def关键字后就是函数的标识符也就是函数名,函数提供的输入接口就是函数名后的圆括号,圆括号中是变量名,一个函数的参数数量由函数功能决定。

def 函数名([形参]):   # 定义函数
      '''注释'''
        函数体
函数名([实参])   # 执行函数

3.形参和实参
形参:是函数内的局部变量,用于接外部数据。
实参:外部数据,用于给形参赋值。

 def function(name):  #函数定义过程中的name为形参,只占据一个参数位置,没有具体值。
	print(name +123)  #print中的name为实参,因为是具体的参数值。
 function(‘hello’)
 hello123里是引用

4.返回值
return 表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。(将函数内部的数据复制到函数外部)
程序一旦执行到return就会结束当前函数。当函数中没有return时,默认返回值是None.

def add(a, b):  
    return a+b   # 返回a+b的值
c = add(1,2)     # c = 3是引用

变量作用域

1.变量作用域:变量的作用域就是定义的变量可以使用的代码范围
2.全局变量:函数内外定义的变量或在函数使用global关键字声明的全局变量。在函数内部修改,他的值可以在整个函数中都可以获取,是可以被所有的函数访问的,除非被删除掉,否则一直存活到脚本运行结束.
3.局部变量:函数内定义的函数,只能在函数或代码块内部被调用,一旦函数或代码块执行完成,数据就会释放。引用比全局变量速度快,应优先考虑使用(全局变量易发生冲突)。

a = "python" # 函数外定义的a为全局变量
def func1():
	print (a) #可直接引用全局变量
def func2():
	b = "小黑屋" # 函数内定义的b为局部变量
	print (b)
func1()
func2()
print(b) #出错

参数的类型

1.默认参数:定义函数时,给形参设置默认值

 def func2(x=1,y=2,z=3)
 	print(x,y,z)
 func2(y=222)#使用默认值参数事,可以不用给拥有默认值

2.位置参数:实参的赋值是按照形参定义的顺序传递的

def func1(x,y,z)
	print(x,y,z)
func1(1,2,3)#TypeError在函数执行时,定义的形参没有实参

3.命名参数:执行函数时,形参名=值(实参)方式赋值,使用命名可以不按照形参定义的顺序赋值

func1(x=1,y=2,z=3)
		print(help(func1)) #查看函数帮助信息help(函数名)

4.可变长度参数
在参数名前加*,变量不确定,形参会将接受到所有参数放置在一个元组中。
*args星号操作符之后的形参将作为元组传递给函数,元组保存了所有传递

def func3(*args):
		m = args[0]
		for i in args[i:]:
			if m < i:
					m = i
		return m
print(func3(1,6,14,16,5))

5.可变长命名参数:**形参,使用字典类型接收所有的参数{“形参”:实参}

def func4(**kwargs):
		print(kwargs)
func4(name="root",password="123456")
input()

6.参数的顺序
参数的顺序是位置参数,默认值参数,可变长参数
如果参数有多种类型,应按照以下这个顺序排列:
第一个是位置参数 fun(a)
第二个是命名参数
第三个是可变参数 fun(a,b=1,*c,**d)
第四个是默认参数 fun(a,b=1)
在可变参数中,非关键字参数要在关键字参数前面

匿名函数:lambda表达式

1.匿名函数: 定义没有函数名的函数
2.l临时只使用一次的简单函数。一般用于给高阶函数传参。

print((lambda name:"hello"+name)("小明"))

3.使用变量赋值的方法给匿名函数—>函数名。

add = lamdba x,y :x+y #add -->function 函数 type(add)
print(type(add))
print(add(3,4))

4.三目运算

x=0
s = 100 if x != 0 else 1 #值1 if 条件 else 值2  当条件成立返回值1,条件不成立返回值2
print(s) #1
print(lambda age:"成年人" if age >= 18 else "未成年")(16))
input()

5.递归函数:
在函数内部调用自己的函数,递归函数要有结束条件,用于退出递归。最后的返回值是最先得到,第一个执行的函数的值最后得到。

def func(n):
    if n == 1 or n == 0:
            return 1
    else:
        return n * func(n-1)
        print(func(5)) 

递归函数的优缺点:
递归函数的优点就是定义简单,逻辑清楚。
缺点是递归效率不高,因为每一次调用都有相应的数值存放在栈,而栈的空间是有限的
因此在写函数时候要注意不可无限递归或者递归次数非常大

生成器yield语句

1.生成器函数使用yield返回返回值,函数没有结束之后继续执行,生成器一次返回一个组或数据。
2.元组生成器 使用场景:产生或处理大量数据,用生成器一个一个处理(生成),节省内存空间。
3.yield语句的函数也可以用来创建生成器对象,每次执行到yield语句并返回一个值之后会暂停或挂起后面代码的执行,下次通过生成器对象的__next__()方法、内置函数next()、for循环遍历生成器对象元素或其他方式显式“索要”数据时恢复执行。

def func1():#循环生成器对象,一次获取一个值
	yield"h"#将生成器对象强制类型转换为列表 print(list(gen))
	yield"i"
gen = func1()
	for i in range
print(func1())

4.生成器—斐波那契

def f():
   a, b = 1, 1            
  while True:
         yield a       # 暂停执行,需要时再产生一个新元素      a, b = b, a+b    # 继续生成新元素
  a= f()
   for i in range(10):
       print(next(a), end='  ')
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值