您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python之函数的基本使用

5b51 2022/1/14 8:15:29 python 字数 15641 阅读 309 来源 www.jb51.cc/python

一、1.什么是函数?函数就是盛放代码的容器,把实现某一功能的一组代码丢到一个函数中就做成了一个小工具2.为什么要用函数?没有用函数之前面临的问题1,代码冗余,程序组织结构不清晰,可读性差2,扩展性差有了函数解决了类似的问题3.如何用函数:先定义,后调用3.1如何定义函数?定义函数的语法:def+

概述

一、
1.什么是函数
函数就是盛放代码的容器,把实现某一功能的一组代码丢到一个函数中就做成了一个小工具
2.为什么要用函数
没有用函数之前面临的问题
1,代码冗余,程序组织结构不清晰,可读性差
2,扩展性差
有了函数解决了类似的问题
3.如何用函数
先定义,后调用
3.1如何定义函数
定义函数的语法:
def+函数名(参数1,参数2,参数3,.......)
"""
文档注释 建议写,解释说明
"""
代码1
代码2
代码3
return 返回值
如何调用函数
函数名(1,2,3)
#一 先定义、后调用
#def func():
#print("start...")
#print("xxx")
#print("stop...")

                #func()
                #func()
                #func()
                #二:函数在定义阶段发生的什么事情
                #定义函数不执行函数代码,但是会检测函数体语法:语法错误会报错,定义的时候逻辑错误不会报
                #x = 100
                #print(x)
                #def func():  # func=函数的内存地址;定义函数名通常用动词
                #print("start...")
                #x
                #if True
                #print('ok')
                #print("xxx")
                #print("stop...")
                #print(func)
                #func()
                四 练习:
                #案例1
                #def foo():
                #print('from foo')
                #bar()                    #属于逻辑错误,不报错
                #foo()

                #案例2
                #def bar():            #定义后不报错了
                #print('from bar')
                #def foo():
                #print('from foo')
                #bar()
                #foo()

                #案例3
                #def foo():
                #print('from foo')
                #bar()                  #定义阶段只检测语法
                #def bar():
                #print('from bar')
                #foo()                  #调的时候已经定义完了

                函数的返回值
                #res = input('username>>: ')  # res = "egon"
                #print(res)

                #res = print("hello")
                #print(res)                                #print无返回值

                #l = [11,22,33]
                #res = l.pop()                           #pop取走有返回值
                #res = l.remove(11)                  #remove删掉没有返回值
                #print(res)

二、
1.如何控制自定义函数的返回值 ?
用return控制函数的返回值
函数内可以有多个return,但只要执行一次,整个函数就立即结束,并且将return后的值分三类:
1、return 值:返回的就是该值本身
2、return 值1,值2,值3:返回的是一个元组
3、函数内可以没有return,或就一个return后没有值返回的是None

例子:
#def max2(x,y): #
#x = 3.3
#y = 5.5
#if x > y:
#return x
#else:
#return y
#print(res * 12) #函数调用者需要对结果做进一步后续处理需要有返回值
登陆认证功能 不需要返回值 该做的都做了

2.定义与调用函数的三种格式
2.1定义函数
1.无参 #定义和调用都不用参数
#def func():
#print('=====')
#print('hello')
#print('=====')
#func()
2.有参 #有无参数跟着需求走
#def max2(x,y):
#if x > y:
#print(x)
#else:
#print(y)
#max2(10,11)

    #def login(user,pwd):       函数传的
    #def login():
    #user = input("u>>>: ")    用户传的
    #pwd = input("p>>>: ")
    #if user == 'egon' and pwd == '123':
    #print('ok')
    #else:
    #print('error')
    #login('egon','123')

      3.空函数
    #def func():    #站位,统筹规划编程任务
    #pass
            # ...
2.2调用函数:
        # 2.1 语句形式
            input(">>:")     #就是函数名+()

#def login():
#user = input("u>>>: ")
#pwd = input("p>>>: ")
#if user == 'egon' and pwd == '123':
#print('ok')
#else:
#print('error')
#login()

#2.2 表达式形式
#res = input(">>: ")      #参与了赋值运算

#def max2(x,y):
#if x > y:
#return x
#else:
#return y
#sal = max2(30,40) * 12

#2.3 可以把函数调用当做参数传给另外一个函数
#def max2(x,y):
#if x > y:
#return x
#else:
#return y
#res = max2(max2(10,20),30)
#print(res)

三、 函数参数分为两大类:

#1、形参:在函数定义阶段括号内定义的变量名,称之为形式参数,简称形参
#2、实参:在函数调用阶段括号内传入的值,称之为实际参数,简称实参
定义阶段参数形参,调用阶段参数实参
#形参与实参的关系是:
#在调用函数时,实参的值会绑定给形参名,然后可以在函数内使用,函数调用完毕后,解除绑定
#def func(x,y):
#x=1
#y=2
#print(x+y)
#m = 1
#n = 2
#func(m,n)

参数详解
#2.1 位置形参::在函数定义阶段按照从左到右的顺序依次定义的形参,称之为位置形参
#特点:必须被传值,多一个不行少一个也不行
#def func(x,y):
#print(x+y)

#func(1,2)
#func(1,2,3) 多一个不行
#func(1,) 少一个也不行

#2.2 认形参:在函数定义阶段就已经为某个形参赋值了,称之为认形参
#特点:在函数定义阶段就已经赋值了,意味着在调用阶段可以不用为其赋值 (性别男多女少)

#ps: 可以混用位置形参与认形参,但是位置形参必须在前
#def func(x,y=2):
#print(x)
#print(y)

#func(1,3)
#func(1)

#def register(name,age,gender="male"):
#print(name,age,gender)
#register("李铁蛋",38)
#register("王全蛋",19)
#register("赵银蛋",28)
#register("lili",18,"female") #各例单独传一下即可

#认形参需要注意的问题是:
#1、认形参的值只在函数定义阶段被赋值一次
#2、认形参的值通常应该是不可变类型
#案例1
#m = 100
#def func(x,y=m): # y -> 100的内存地址
#print(x,y)
#m = 200
#func(1)

#案例2
#m = [11,22,]
#def func(x,y=m): # y -> [11,22,]的内存地址
#print(x,y)
#m = 200
#m.append(33)
#func(1)

#def register(name,x,hobbies=None): # hobbies = []内地址
#if hobbies is None:
#hobbies = []
#hobbies.append(x)
#print("%s 的爱好是 %s" %(name,hobbies))
#register("egon",'read')
#register("liu",'chou')
#register("hxx",'tang')

#2.3 位置实参:在函数调用阶段按照从左到右的顺序依次传入的值,称之为位置实参
#特点:按照顺序与形参一一对应
#def func(x,y):
#print(x)
#print(y)
#func(1,2)
#func(2,1)

#2.4 关键字实参:在函数调用阶段按照key=value的格式传入的值,称之为关键字实参
#特点:可以打乱顺序,但是仍然能够为指定的形参赋值

#ps:可以混用位置实参与关键字实参,但是
#1、位置实参必须在关键字实参前
#2、不能为同一个形参重复赋值
#def func(x,y):
#print(x)
#print(y)

#func(y=2,x=1)
#func(1,y=2)
#func(y=2,1)
#func(1,2,y=3)

2.5 *与**在形参与实参中的应用

可变长的参数:可变长指的是在函数调用阶段,实参的个数不固定,而实参是为形参赋值的,所以对应着必须要有一种特殊格式的形参能用来接收溢出的实参

#def my_sum(*args):
#res = 0
#for num in args:
#res += num
#print(res)

#my_sum(1,2,3,4,5)
#my_sum(1,2)

2.形参中带会接收溢出的关键字实参,然后将其存成字典,然后赋值给紧跟其后的变量名

#def func(x,**kwargs): #y = {'a':1,'b':2,'c':3}
#print(x)
#print(kwargs)

#func(1,a=1,b=2,c=3)
#func(1,2,3,a=1,b=2,c=3) # 报错

在形参中中带*和*是一种汇总行为
在实参中带
和**是一种打散行为

#实参中带后跟的必须是一个可以被for循环遍历的类型,*会将实参打散成位置实参
#def func(x,y,z):
#print(x)
#print(y)
#print(z)

#func([11,22,33]) # func(11,22,33)
#func(
"hello") # func("h","e","l","l","o")

#实参中带后跟的必须是一个字典,**会将实参打散成关键字实参
#def func(x,y,z):
#print(x)
#print(y)
#print(z)

#func(**{"x":1,"y":2,"z":3}) # func(z=3,x=1,y=2)

def index(x,y,z):
print(x,y,z)

def wrapper(*args,**kwargs): # args = (1,2,3,4,5,6,7) kwargs={"a":1,"b":2,"c":3}

#print(kwargs)
index(*args,**kwargs)  # index(*(1,2,3,4,5,6,7),**{"a":1,"b":2,"c":3})
                       # index(1,2,3,4,5,6,7,a=1,b=2,c=3)

#wrapper(1,2,3,4,5,6,7,a=1,b=2,c=3)
#wrapper(1,2,3)
wrapper(1,z=3,y=2)

总结

以上是编程之家为你收集整理的python之函数的基本使用全部内容,希望文章能够帮你解决python之函数的基本使用所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶