python入门第十一节--深入浅出函数基础

函数的重要性

函数在Python中的重要性体现在以下几个方面:

1. 代码重用:函数允许我们编写一次代码,然后在需要的时候多次调用。这避免了代码的重复,使得代码更加简洁和易于维护。

2. 模块化:通过将代码分割成多个函数,我们可以将复杂的问题分解成更小、更易于管理的部分。每个函数负责完成一个特定的任务,这样有助于组织代码结构。

3. 抽象化:函数提供了一种抽象层,使得我们不必关心函数内部的实现细节,只需知道如何使用它。这有助于简化问题解决过程,使得代码更易于理解。

4. 可读性:良好的函数命名和结构可以提高代码的可读性。通过函数名,我们可以大致了解函数的功能,而不需要深入到函数内部。

5. 调试和维护:当程序出现问题时,如果代码被组织成多个函数,那么调试起来会更加容易。我们可以单独测试每个函数,而不必从头到尾运行整个程序。

6. 扩展性:使用函数可以更容易地扩展程序。如果需要添加新功能,只需编写新的函数或修改现有函数,而不是重写整个程序。

7. 代码共享:函数可以很容易地在不同的程序之间共享。Python的标准库就是一系列预先编写好的函数,可以供所有Python程序员使用。

8. 性能优化:在某些情况下,函数可以用来优化性能。例如,通过将计算密集型的操作放在函数中,并使用缓存(如functools.lru_cache)来存储结果,可以避免重复计算。

以下是函数重要性的具体例子:

- 内置函数:Python提供了大量的内置函数,如`print()`, `len()`, `sum()`等,这些函数极大地简化了编程任务。

- 自定义函数:通过编写自定义函数,我们可以创建个性化的工具来满足特定的需求,这对于解决复杂问题至关重要。

- 高阶函数:Python支持高阶函数,即可以接受其他函数作为参数或返回函数的函数。这为编写更灵活和强大的代码提供了可能。

- 装饰器:装饰器是一种特殊的高阶函数,它允许我们在不修改函数内部代码的情况下,增加函数的功能。

函数是Python编程的核心组成部分,它们使得编程更加高效、有序和强大。掌握函数的使用对于成为一名优秀的Python程序员至关重要。

函数定义

def+空格+函数名+括号+冒号

tab缩进+代码体

#示例:
def fac():
    print('函数定义')#不调用不能执行

函数的调用

函数名+括号

fac()

函数功能

函数体里有代码,函数就有功能。

def fac():
	print('有我就有功能')
fac()

无代码,只是用来测试或者先做好项目需求,代码体可用pass代替 避免报错

 

def fac():
	pass  # pass占位,避免报错
fac()

函数的参数 

函数可分为有参函数和无参函数。

参数分为形参和实参

形参:函数定义阶段括号内指定的变量名

实参:函数调用阶段括号内传入的值

形参和实参的关系:再调用函数时,会将实参(值)赋值(绑定)给形参(变量名)

形参分为  位置形参 、 默认形参 、不定长形参

实参分为  位置实参、 关键字实参

位置形参

只有变量名 没有赋值

def fac(a,b):  #a,b 是位置形参
    print('这是位置形参')

位置实参

就是给位置形参传值

fac(1, 2)

传入的1 2是位置实参,位置实参个数必须与位置形参的个数一致,可以是任意数据类型。

关键字实参

函数调用阶段,按照key=value的形式给指定的形参传值

注意:

1.可以打乱顺序传值,但必须指名道姓的为形参传值

def fac(a,b):
    print('关键字实参')
fac(a=1,b=2)

2.可以混合使用位置实参和关键字实参,但必须注意:

2.1位置实参必须在关键字实参前面

def fac(a,b):
    print('关键字实参')
fac(1,b=2)
fac(b=2,1)  # 不可以

2.2不能对一个形参重复赋值

def fac(a,b):
    print('关键字实参')
fac(1,a=2)#这是不对的 位置形参默认传给a,后面关键字实参又给a传值 不可
fac(1,b=2)#可以

默认形参

就是又默认值的形参。定义函数时,使用key=value为形参赋值了

注意:

1.在定义阶段就已经被赋值,意味着在调用阶段可以不为默认形参赋值

2.位置形参放在默认形参前面

def fac(a,b=2):
    print('b是默认形参')
fac(1)  # 正确的可以不再给b传值
fac(1,5)  # 正确,5会替换掉2,最终b=5

不定长参数

args

形参中带*

会将调用函数时溢出位置实参保存成元组的形式然后赋值给*后的变量名

def foo(x,y,*z)
	print(x)#x拿走第一个1
    print(y)#y拿走第二个2
    print(z)#剩下的都给z  以元组的形式
    print(*z)#*z是将元组z打散
foo(1,2,3,4,5,6,7)
kwargs

形参中带**

会将调用函数时溢出的关键字实参保存成字典的形式,赋值给**后面的变量名

def foo(x,y,**z)
	print(x)
    print(y)
    print(z)
    print(**z)
foo(1,2,3,4,5,6,7)
#这是不对的,**只能接受关键字实参
def foo(x,y,**z)
	print(x)#x拿走第一个1
    print(y)#y拿走第二个2
    print(z)#剩下的都给z  以字典的形式
    #print(**z)字典不能这样打散
foo(1,2,a=3,b=4,c=5,d=6,e=7)

如果字典做实参,可以打散成关键字实参

def foo(x,y,**z)
	print(x)#x拿走第一个1
    print(y)#y拿走第二个2
    print(z)#z实际就是字典a
a = {'a':1,'b':2,'c':3}
foo(1,2,**a)#这是可以的

返回值

返回值是一个函数的处理结果  return

注意:(重点)

1.return是一个函数结束的标志,函数内可以有多个return,但只要执行一次整个函数就会结束运行 默认return None

2.return的返回值无类型限制,可以是任意数据类型

3.return的返回值无个数限制,可以用逗号隔开多个任意类型的值

返回0个:返回None (不写return默认会在函数的最后一行添加return None

返回1个:返回的值是该值本身

返回多个:返回值是元组

4.return关键字:return是函数结束的标志 利用这一点可以结束循环

def factory(a, b):
    return True
#factory(1,2)#这样什么也不会输出,return将True返回出来,factory接收返回值
print(factory(1,2))  # 这样可以
a=factory(1,2)
print(a)#这样也可以  a只是一个变量名,把返回值赋值给它而已,和形参无关  可以随意命名

局部变量与全局变量

外部不能访问函数内部的变量

def fun1():
    x=1
print(x)
fun1()#会报错

函数内部可以访问外部的变量

x=1
def fun1():
    print(x)
fun1()#可以

函数内部不能修改函数外部的变量

x=1
def fun1():
    print(x)
    #x=x+1#不行   可用不可改
fun1()

global 能让我们在函数里面取修改全局变量的值

x=1
def fun1():
    global x:
        x=x+1
    print(x)
fun1()#这就可以改了

nonlocal 让嵌套函数能够修改嵌套函数之外的值

def func1():
    a=3
    def func2():
        nonlocal b
        b=b+1#b本来是不能修改的,nonlocal声明之后就可以了
    func2
func1

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_68472237

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值