Python之定义函数

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()
View Code

函数在定义阶段都干了什么:

#只检测语法,不执行代码
也就说,语法错误在函数定义阶段就会检测出来,而代码的逻辑错误只有在执行时才会知道

定义函数的三种形式:

#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,代码运行就会有语法错误。

 

posted @ 2018-03-05 13:16  王先生是胖子  阅读(5864)  评论(0编辑  收藏  举报