zoukankan      html  css  js  c++  java
  • Python笔记【6】_函数

    #!/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)
  • 相关阅读:
    C#
    Excel 中大量图片如何快速导出? 转载自:http://www.zhihu.com/question/20800948
    IE的F12开发人员工具不显示 转载自:http://blog.csdn.net/longyulu/article/details/8749705
    firefox ie 比较 relative path
    fiddler save files
    selenium3加载浏览器
    Linux安装PHP
    客户端级别的渲染分析工具 dynaTrace
    前端性能分析:分析百度和sogou
    Linux vi的基本操作
  • 原文地址:https://www.cnblogs.com/sjl179947253/p/10281826.html
Copyright © 2011-2022 走看看