首页 > 编程语言 > 详细

Python笔记【6】_函数

时间:2019-01-17 14:46:42      阅读:186      评论:0      收藏:0      [点我收藏+]
#!/usr/bin/env/python
#-*-coding:utf-8-*-

#Author:LingChongShi   #查看源码Ctrl+左键

‘‘‘
def:函数是一段可以重复调用的代码,通过输入参数,返回对应的结果
格式如下:
def 函数名(形式参数):
    函数体
‘‘‘

‘‘‘一、定义一个函数‘‘‘
def add(a,b):
    pass  #不实现函数功能,只是一个占位符

‘‘‘二、参数‘‘‘
#必须参数
def info(name,age,address):
    print(name={0},age={1},address={2}.format(name,age,address))
    print(name={:s},age={:d},address={:s}.format(name,age,address))
info(xiaoshao,20,xian)  #必须参数:实际参数和形式参数按照顺序匹配

#关键字参数
def info1(name,age,address):
    print(name={0},age={1},address={2}.format(name,age,address))
    print(name={:s},age={:d},address={:s}.format(name,age,address))
info1(age=20,address=xian,name=xiaoshao)  #关键字参数:制定形式参数对应的实际参数,可以不用按照顺序进行匹配

def info2(name,age,*,address): #声明函数,参数中*单独出现,*后面的参数必须使用关键字传入
    print(name={0},age={1},address={2}.format(name,age,address))
info2(xiaoshao,20,address=xian)

#默认参数
def info3(name,age,address=beijing):  #函数存在默认参数,默认参数不能放在非默认参数之前
    print(name={0},age={1},address={2}.format(name,age,address))
info3(xiaoshao,20)  #默认参数:如果没有传递参数,则会使用默认参数

#动态参数,*arg和**kwargs
def info4(name,age,*args):  #*address数据类型是元组
    print(name={0},age={1},args={2}.format(name,age,args))
info4(xiaoshao,20,,12345678,shenzhen)  #调用时,以元组的形式存放所有未命名的变量参数
info4(xiaoshao,20)   #调用时,可变形式参数中没有指明实际参数,即为一个空元组

def info5(name,age,**kwargs):  #**address数据类型是字典
    print(name={0},age={1},kwargs={2}.format(name,age,kwargs))
info5(xiaoshao,20,sex=,phone=12345678,address=shenzhen)

def info6(*args,**kwargs):
    print(args,kwargs)
info6()
info6(12,12.33,中文,[1,2],(3,4),{a:1},a=4,b=中文)



‘‘‘三、return返回值‘‘‘
‘‘‘1、return[表达式]:调用方法返回表达式,不带参数值的return语句时,返回值是None;
   2、函数返回值意义:函数/方法返回值是为了给另外一个函数/方法提供一个请求的参数
‘‘‘
‘‘‘
接口测试:查看用户信息
1、发送post请求,login请求成功
2、登录成功后,返回token
3、使用token,可以查看用户信息
‘‘‘
def login(username,possword):
    if username== admin and possword==12345:
        return ieureuejfdj38028jfkjfkjk  #使用return可以进行token的返回
        # print(‘ieureuejfdj38028jfkjfkjk‘)   #使用print只是打印token的值,并不返回
    else:
        return Login Fail

def userInfo(token):
    if token==ieureuejfdj38028jfkjfkjk:
        print(查看到订单信息)
    else:
        print(退出登录)

userInfo(login(admin,12345))


‘‘‘四、变量作用域LEGB‘‘‘
‘‘‘
1、4种变量作用域:
   Local(局部作用域):在一个函数或者方法内部;
   Enclosing(闭包函数外的函数中):嵌套函数,在被包裹函数外部并且在包裹函数内部;
   Global(全局作用域):执行脚本自身的最高层次;
   Built-in(内建作用域):Python自身保留的特殊名称;
2、LEGB规则:在局部没有找到,去局部外的局部找(闭包),找不到去全局找,再去内建进行搜索,都找不到产生一个NameError;
3、Python中只有模块(module)、类(class)、函数(def、lambda)才引入新的作用域;
4、Python中代码块(if/elif/else、try/except、for/while等)是不会引入新的作用域,即内部定义的变量,外部也可进行访问;
‘‘‘
‘‘‘1、LG--->局部、全局作用域‘‘‘
a=全局作用域
def f():
    print(a)
f()

a1=全局作用域
def f1():
    a1=局部作用域
    print(a1)
f1()
print(a1)

‘‘‘2、LEG - 局部、闭包与全局作用域‘‘‘
a2=全局作用域
def f2():
    a2=闭包作用域
    def f3():
        a2=局部作用域
        print(a2)
    f3()
    print(a2)

f2()
print(a2)

‘‘‘3、LEGB - 局部、闭包、全局与内建作用域‘‘‘
in_var = global variable

def len1(in_var):
    print(called my len() function)
    l = 0
    for i in in_var:
        l += 1
    return l
def a_func(in_var):
    len_in_var = len1(in_var)   #a_func()函数在尝试搜索内建(B)命名空间之前,首先会在全局作用域(G)中发现len()
    print(Input variable is of length, len_in_var)

a_func(Hello, World!)

‘‘‘五、global和nonlocal关键字‘‘‘
‘‘‘
1、global:当内部作用域想要修改外部作用域时,需要使用global
2、nonlocal:修改嵌套作用域(enclosing 作用域,外层非全局作用域)中变量时,需要使用nonlocal
‘‘‘
str=我是全局变量
def fun1():
    global str  #global:局部变量可以修改全局变量
    str=我是局部变量
    print(str)
fun1()
print(str)


def fun2():
    str1=我是闭包变量
    def fun3():
        nonlocal str1  #修改嵌套作用域中变量时,需要使用nonlocal
        str1=我是局部变量
        print(str1)
    fun3()
    print(str1)
fun2()

‘‘‘六、特殊情况‘‘‘
‘‘‘
a=10
def sum():
    a=a+1   #sum函数中的a使用的是局部,未定义,无法修改
    print(a)
sum()  #结果:报错
‘‘‘
#修改a为全局变量,通过函数参数传递,可以正常执行
a=10
def sum(a):
    a=a+1
    print(a)
sum(a)

 

Python笔记【6】_函数

原文:https://www.cnblogs.com/sjl179947253/p/10281826.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!