python之函数的基本使用

python之函数的基本使用,第1张

概述一、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 func(x,*args): # y=(2, 3, 4, 5, 6)
#print(x)
#print(args)
#func(1,2,3,4,5,6)

#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(args)
#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之函数的基本使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1188334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存