Python 第二部分 函数

目录

前言

一、python函数的定义

函数是工具,调用的过程即使用工具的过程,因此函数名为动词为好。 先定义再调用。一般格式为:

def 函数名(参数):  #好的函数名能看出其功能
   代码段;         #代码段可适当的注释
   代码段;
   return 返回值
函数名()#调用函数
一个函数无非三种情况:
#有参数的情况:
def Max2(x,y):
    if x>y:
        print(x)
    else:
        print(y)
Max2(100,192)


#无参数的情况
def Max1():
    print("这个是一个无参数的函数")
Max1()


#空函数
def Max3()
    pass
Max3()

二、函数的调用

调用即执行的意思,就是函数名(参数)即可:

三、函数的返回值

1,return None与 return,与不写return 其相当于返回的结果都是None

2,return 返回的类型可以是任何数据类型

3,可以有多个return但是一次只return一个结果

四、函数的作用域

局部变量与全局变量:

局部变量:在被调用函数内部定义的变量即局部变量,在局部的变量在该函数执行完之后就会自动的销毁。

全局变量:在所有函数之外定义的变量就叫全局变量

def spam():
    eggs=99

spam()
print(eggs) #这里会报错,因为eggs这个变量在函数的内部属于内部变量,而这里print()函数调用了一个
            #被没有定义的局部变量,所以会报错。


def spam():
    egg = 100
     bar()
    print(egg)
    def bar():
        egg = 50
spam()          #这里spam()执行的结果是egg=100,因为在spam()函数体内bar()函数内,虽然egg=50但问    
                #但这里的egg=50是局部变量,只能在bar()内部使用,当bar()执行结束,回到spam()体内 
                #egg=50失效





def foo():
    print(eggs) #报错,原因是因为在函数内部定义了eggs因此函数认为这是一个局部变量,但在调用之前                
                 #未定义
    eggs="local"#局部变量
eggs="Global" #全局变量
foo()

五,函数的参数

1,参数的分类

巧记为:关键字参数传参和默认参数,都需要注意的是保证位置参数在前

               命名关键字参数:命名关键(字)参数,即这个参数一定要传值,且以key-value的形式

 

2,用法举例

关键字参数
def func1(a,b,c):
    print(a,b,c)
func1(2,c=3,b=4) #混用正确 位置参数在前面
func1(2,a=3,c=4)#报错 a为多个值
func1(a=1,b=2,3)#报错 位置参数在前。


默认参数的用法:位置形参数在前
def func(b,c,a=1): #func(a=1,b,c)会报错
    print(a,b,c)
func(b=3,c=4)
func(a=8,b=3,c=5)


可变长参数*与**(*对应的是位置传参,所以对应的可选参数为参数构成的列表或元组,而**kwargs对应的是关键字传参,所以采用字典的形式)
def foo(x,y,z,*args):#保存成不可变的元组
    print(x,y,z)
    print(args)
foo(1,2,3,4,5,6)   #args=(4,5,6)
foo(1,2,3)         #args={}
****思考****
def foo(x,y=1,z=5,*args):
print(x,y,z)
print(args)

foo(3,(4,5,6))#这表示按参数位置传参,y=(4,5,6) 所以z=5,args为{}
foo(3,*(4,7,6))#这表示将(4,7,6)打散传入,y=4,z=7,args=(6)





def foo1(x,y,z,**kwargs):
    print(x,y,z)
    print(kwargs)
foo1(9,8,7,a=6,b=5,c=4)  #kwargs={'a'=6,'b'=5,'c'=4}
foo1(9,8,7)              #{}


#关键字命名
如果实参中加*、**表示打散,拆开【关键字:巧记为以相关键值传值】
def foo1(x,y,z,**kwargs):
    print(x,y,z)
    print(kwargs)
foo1(9,8,7,**{'a':6,'b':5,'c':4}) # kwargs={'a': 6, 'b': 5, 'c': 4}


***命名/关键字参数/的使用 
def foo(x,y,*,z):  #星号后面的参数就表示<带>关键字的参数,关键字参数必须得传值,而且以key-Value 
                   #的方式。
    print(x,y,z)
foo(2,4,z=1)


***重点****
def foo(x,y,*z)的区别,上面的*,z表示z为关键字参数,需要按照关键字传参的方式key-Value的方式,而*z类似于*args为可传可不传的参数,应该以列表或元组的方式传参。



个人总结

函数的用法,函数的三要素

传参的最难的一种情况举例:

def foo(x,y=1,*,z,m=2,**kwargs):
    print(x,y,z,kwargs)
foo(1,z=3) #注意这里*后面的参数是命名关键字参数,所以用z=3,必须有的。至于**kwargs可传可不传


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值