函数--python基础

1. 为什么要使用函数

函数就是执行特定任务和完成特定功能的一段代码
随着代码量增大,需要对代码的结构重新进行整理打包,以降低代码结构的复杂性和冗杂度。
为了使得程序代码变得简单,需要把程序分解成较小的组成部分,可以通过:
函数、类、模块三种方法来实现
1)复用代码
2)隐藏实现细节
3)提高可维护性
4)提高可读性便于调试

2. 函数的定义

2.1 函数的创建使用关键字:def,函数名后面跟对小括号():

def Func1():
    print('我在学习python')

注意:
1) 创建的函数名后面必须加一对小括号()
2)创建函数后,未调用函数,则该函数里的代码不会被执行
3)函数在刚被发明出来时,是没有参数的,这样只能对同样内容的代码进行打包,与使用循环没有本质不同。
因此,函数的参数出现,使得函数可以事先个性化

2.2 函数的参数

def Func2(name):
    print(name+'在学习python')
    
def Func3(name,course):
    print(name+'在学习'+course)    

2.2.1 形参和实参

函数因参数而灵活,若没有参数,一个函数就只能死板地完成一个功能、一项任务。
参数分为形式参数(parameters),简称形参和实际参数(arguments),简称实参。
在函数定义时用来占位的参数称为形参;
在函数调用过程中实际传递进来的参数称为实参

2.2.2 默认参数

函数在创建的时候指定默认值,这样在函数调用的时候,若没有传递实参,则采用默认参数值

def Func4(name='蜜蜂',course='采蜜'):
    print(name+'在学习'+course)

2.2.3 可变参数

1) 个数可变的位置参数

(1) 定义函数时,可能会无法事先确定传递的位置实参的个数
(2)使用*定义个数可变的位置参数
(3)结果为一个元组
(4)在函数的定义过程中个数可变的位置参数最多只能有1个

def func(*args):
    print(args)
    print(args[0])

func(11)
func(11,22,33,44)
func([66,88],999,333)

在这里插入图片描述

2) 个数可变的关键字参数

(1) 定义函数时,可能会无法事先确定传递的位置实参的个数
(2)使用**定义个数可变的关键字参数
(3)结果为一个字典
(4)在函数的定义过程中个数可变的关键字参数最多只能有1个
(5)在函数的定义过程中,如果既有个数可变的位置参数又有个数可变的关键字参数,个数可变的位置参数一定放在个数可变的关键字参数之前。

def fun(**args):
    print(args)
fun(a=111)
fun(a=222,b=333,c=444,d=555)

在这里插入图片描述

2.3 函数的调用

2.3.1 调用函数只需要直接写出函数名加上小括号即可

Func1()
Func2('包菜')
Func3('小狗','啃骨头')
Func4()
Func4('蝴蝶','跳舞')

在这里插入图片描述

2.3.2 实际参数

函数在调用的过程中,实际传入的参数,如商数函数调用中传入的:包菜、小狗、啃骨头、蜜蜂、采蜜、蝴蝶、跳舞

2.3.3 位置参数

在函数定义的时候,已经确定参数的名称与位置,调用时,按照顺序传递正确的参数即可,这类位置固定的参数称为位置参数。

Func2('包菜')
Func4('蝴蝶','跳舞')

但是实际中可能会搞乱位置参数的顺序,无法实现函数的逾期效果,这时可以在调用时使用关键字参数

2.3.4 关键字参数

在传入实参时明确指定形参的变量名,这时参数之间不存在先后顺序

Func4(course='跳舞',name='蝴蝶')

注意:
1)调用函数时,位置参数必须在关键字参数前面

Func4('小鸡',course='画竹叶')

2.4 函数的返回值

使用:return关键字,后面跟着的就是指定要返回的值

3.函数文档

函数文档是为了自己以后或者别人更好地理解你的函数设计逻辑,主要描述该函数的功能和一些注意事项

def Func6(a,b):
    '''
    计算a的b次方
    :param a: 底数
    :param b: 指数
    :return: a**b
    '''
    c = a**b
    return c
print(Func6(2,3))

函数的文档可以通过特殊属性__doc__获取

print(Func6.__doc__)

在这里插入图片描述

4. 作用域

作用域是变量可被访问的范围

4.1 局部变量

定义在函数内部,只能在函数的内部生效,不能在函数外被引用。

def mya():
    x=520
    print(x)
mya()
print(x)

在这里插入图片描述

4.2 全局变量

函数体外定义的变量,函数内外均起作用

# 全局变量
x = 521
def myb():
    print(x)
myb()    # x可以被访问

4.2.1 函数中存在与全局变量相同的变量名时

x = 888
def myc():
    x = 111
    print(x)
myc()   # 输出局部变量111,同名的局部变量覆盖全局变量x
print(x)  # 输出全局变量888

4.2.2 函数内部创建全局变量:global语句

不提倡使用global语句在函数内部定义或修改全局变量,以免出现难以排查的bug

x = 888
def myc():
    global x
    x = 111
    print(x)
myc()   # 输出局部变量111
print(x)  # 输出修改后的全局变量111

4.3 嵌套函数

 def myd():
    x = 999
    print('in myd,x=',x)
    def mye():
        x = 666
        print('in mye,x=',x)

mye() # 内部嵌套的函数是无法直接调用的,报错

在这里插入图片描述
要想调用内部嵌套的函数mye,需要在定义时调用

def myd():
    x = 999
    print('in myd,x=',x)
    def mye():
        x = 666
        print('in mye,x=',x)
    mye()

myd() 

在这里插入图片描述

4.3.1 修改嵌套函数的值: nonlocal语句

def myd():
    x = 999
    def mye():
        nonlocal x
        x = 666
        print('in mye,x=',x)
    mye()
    print('in myd,x=', x)

myd()

在这里插入图片描述

def myd():
    x = 999
    def mye():
        # nonlocal x
        x = 666
        print('in mye,x=',x)
    mye()
    print('in myd,x=', x)

myd()

在这里插入图片描述

注意:
在python命名时避免使用与内部函数相同的变量名,否则会发生覆盖,使内部函数改变

num = 520
print(type(num))
num1 = str(num)
print(type(num1))
str='变量名'
print(str)
intt = 666
print(type(intt))
intt1 = str(intt) 
''' 内部函数str已被改变,不再是内部函数str,变成字符串:变量名,无法再执行转变字符串的功能'''
print(type(intt1))

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值