Python之定义函数
一、函数的写法:
#语法 def 函数名(参数1,参数2,参数3,...): '''注释''' 函数体 return 返回的值 #函数名要能反映其意义
1 def auth(user:str,password:str)->int: 2 ''' 3 auth function 4 :param user: 用户名 5 :param password: 密码 6 :return: 认证结果 7 ''' 8 if user == 'george' and password == '123': 9 return 1 10 # print(auth.__annotations__) #{'user': <class 'str'>, 'password': <class 'str'>, 'return': <class 'int'>} 11 12 user=input('用户名>>: ').strip() 13 pwd=input('密码>>: ').strip() 14 res=auth(user,pwd) 15 print(res)
1 def mylen(): 2 s = 'Hello George' 3 length = 0 4 for i in s: 5 length += 1 6 return length 7 leng = mylen() 8 print(leng) 9 #return 返回的length的值给函数mylen 10 #函数mylen()在将值付给leng变量 11 #在打印leng就是结果了
二、函数的返回值:
函数的返回值可以是任意的数据类型
如果有返回值,必须要用变量接收才会有效果
def func(): a=111 b=[1,2,3] return b ret = func() print(ret)
当有两个返回值时,返回的类型是元组类型
def func(): a=111 b=[1,2,3] return a,b ret = func() print(type(ret)) print(ret)
函数也可以没有返回值,在不写return的时候,一个函数默认的返回值是‘None’
def func1(): a=111 b=[1,2,3] ret = func1() print(ret)
当只写一个return的时候,函数的返回值为None。
def func2(): a =111 b = [1,2,3,] return ret = func2() print(ret)
return None的时候,函数的返回值也为None(几乎不用)
def func3(): a = 111 b = [1,2,3] return None ret = func3() print(ret)
当函数执行到return时,就结束了当前的函数。只打印1111,如果没有return,就打印1111和2222。
def func4(): print(1111) return print(2222) func4()
def func5(): for i in range(10): if i == 6: return else: print(i) func5()
总结:
#函数的返回值为None有三种情况
#1.不写返回值
#2.只写一个return
#3.return None (几乎不用)
#return的作用:结束一个函数的执行
#函数的返回值不为None,有返回值
#return xxx 返回一个值(一个变量)
#return a,b 返回多个值(多个变量),多个值之间用逗号区分
#接收:可以用一个变量接收,以元组的形式返回
# 也可以用多个变量接收,返回几个就用几个变量去接收
#函数要先定义 ,后调用。
def func6(): '''返回一个值''' #return 111 #return 'abc' return ['abc',123]
def func7(): '''返回多个值''' a = 123 b = 'abc' return a,b,[1,2,3] # ret = func7() # print(ret) # m,n,k = func7() # print(m) # print(n) # print(k)
定义一个列表,返回列表的最后一个值。
def func8(): l = [1,2,3,4] return l[-1] ret = func8()print(ret)
====================================================
函数使用的原则:先定义,再调用
1 函数即“变量”,“变量”必须先定义后引用。未定义而直接引用函数,就相当于在引用一个不存在的变量名 2 #测试一 3 def foo(): 4 print('from foo') 5 bar() 6 foo() #报错 7 8 #测试二 9 def bar(): 10 print('from bar') 11 def foo(): 12 print('from foo') 13 bar() 14 foo() #正常 15 16 #测试三 17 def foo(): 18 print('from foo') 19 bar() 20 21 def bar(): 22 print('from bar') 23 foo() #会报错吗? 24 25 26 #结论:函数的使用,必须遵循原则:先定义,后调用 27 #我们在使用函数时,一定要明确地区分定义阶段和调用阶段 28 29 #定义阶段 30 def foo(): 31 print('from foo') 32 bar() 33 def bar(): 34 print('from bar') 35 #调用阶段 36 foo()
函数在定义阶段都干了什么:
#只检测语法,不执行代码 也就说,语法错误在函数定义阶段就会检测出来,而代码的逻辑错误只有在执行时才会知道
定义函数的三种形式:
#1、无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印 #2、有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值 #3、空函数:设计代码结构
1 #定义阶段 2 def tell_tag(tag,n): #有参数 3 print(tag*n) 4 5 def tell_msg(): #无参数 6 print('hello world') 7 8 #调用阶段 9 tell_tag('*',12) 10 tell_msg() 11 tell_tag('*',12) 12 13 ''' 14 ************ 15 hello world 16 ************ 17 ''' 18 19 #结论: 20 #1、定义时无参,意味着调用时也无需传入参数 21 #2、定义时有参,意味着调用时则必须传入参数
1 def auth(user,password): 2 ''' 3 auth function 4 :param user: 用户名 5 :param password: 密码 6 :return: 认证结果 7 ''' 8 pass 9 10 def get(filename): 11 ''' 12 :param filename: 13 :return: 14 ''' 15 pass 16 17 def put(filename): 18 ''' 19 :param filename: 20 :return: 21 ''' 22 def ls(dirname): 23 ''' 24 :param dirname: 25 :return: 26 ''' 27 pass 28 29 #程序的体系结构立见
空函数
如果想定义一个什么事也不做的空函数,可以用pass
语句:
def nop(): pass
pass
语句什么都不做,那有什么用?实际上pass
可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass
,让代码能运行起来。
pass
还可以用在其他语句里,比如:
if age >= 18: pass
缺少了pass
,代码运行就会有语法错误。