zoukankan      html  css  js  c++  java
  • Python基础第六天

    ---恢复内容开始---

    函数

    一:函数定义

    def test():
        x=3
        y=2*x+1
        return y
    a=test( )   #运行test,并将结果放在a中。
    print(a)

    def:定义函数的关键字

    test:函数名

    ():内可定义形参

    return:定义返回值

    二:函数的返回值

          当一个函数/过程没有使用return显示的定义返回值时,python解释器会隐式的返回None,

           返回值=1,返回object

           返回值>1,返回tuple

    def test01():
          msg='hello The little green frog'
          print(msg)
    
    def test02():
         msg='hello WuDaLang'
         print(msg)
         return msg
    
    t1=test01()
    t2=test02()
    
    print(t1)
    print(t2)
    
    hello The little green frog
    hello WuDaLang
    None
    hello WuDaLang

    三:函数参数:位置参数   关键字参数  默认参数

    def calc(x,y):
         res = x**y
         return res
     c = calc(2,3)
     print(c)         #关键字参数
    
    
    
    
    def test(x,y,z):
         print(x)
         print(y)
         print(z)
     test(y=1,x=3,z=4)     #位置参数
    位置参数,必须一一对应,缺一行不行多一行也不行
    关键字参数,无序一一对应,缺一行不行多一行也不行
    test(1,y=2,3)报错
    test(1,3,y=2)报错
    test(1,3,z=2,y=4)报错
    位置参数必须在关键字参数左边

    参数组:**字典 *列表
    #*args 处理的是位置参数,处理成列表
    def test(x,*args):#*args   以元祖传给args
        print(x)
        print(args)
    # test(1,2,3,4,5)
    # test('alex',{'name':'alex'})
    test(1,*['x','y','z'])
    test(1,*('x','y','z'))
    
    #**kwargs 处理的是关键字参数
    def test(x,**kwargs):
        print(x)
        print(kwargs)
    test(1,y=2,z=3)
    
    def test(x,*args,**kwargs):
        print(x)
        print(args)
        print(kwargs)
    test(1,y=2,z=3)

    四:局部变量和全局变量

          在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

    当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
    name = 'lhf'
    def change_name():
        name = '随后绝对是'
        print('change_name', name)
    change_name()
    
    #如果函数的内容无global关键字,优先读取局部变量,可以全局变量,无法对全局变量重新赋值,但是对于变量是可变类型,可以对内部元素进行操作。
    #如果函数中有global关键字,变量本质就是全局变量,可读取可赋值。
    ########全局变量变量名大写,局部变量变量名小写
    有关函数的内容有无global关键字--有无声明局部变量例子:
    #函数的内容无global关键字----有声明局部变量
    NAME =['gh','hj']
    def ghjhjk():
        NAME ='TY'
        print('i am',NAME)
    ghjhjk()
    #函数的内容无global关键字----无声明局部变量
    NAME =['gh','hj']
    def ghjhjk():
        NAME.append('rtyu')
        print('i am',NAME)
    ghjhjk()
    #函数的内容有global关键字
    NAME =['gh','hj']
    def ghjhjk():
        global NAME
        NAME =['内牛满面']
        print('i am',NAME)
    ghjhjk()
    
    NAME ='海风'
    def huangwei():
        name = '黄伟'
        print(name)
        def liuyang():
            name ='刘洋'
            print(name)
            def nulige():
                name = '胡志华'
                print(name)
            print(name)
            nulige()
        liuyang()
        print(name)
    huangwei()
    
    name = '刚娘'
    def weihou():
        name = '陈卓'
        def weiweihou():
            global name
            name = '冷静'
        weiweihou()
        print(name)
    
    print(name)
    weihou()
    print(name)
    
    name = '刚娘'
    
    def weihou():
        name = '陈卓'
        def weiweihou():
            nonlocal name
            name = '冷静'
        weiweihou()
        print(name)
    
    print(name)
    weihou()
    print(name)
    View Code

    五:函数递归

       在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

      递归特性:

    1. 必须有一个明确的结束条件  return

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    3. 递归效率不高

    import time
    
    person_list=['alex','wupeiqi','yuanhao','linhaifeng']
    def ask_way(person_list):
        print('-'*60)
        if len(person_list) == 0:
            return '没人知道'
        person=person_list.pop(0)
        if person == 'linhaifeng':
            return '%s说:我知道,老男孩就在沙河汇德商厦,下地铁就是' %person
        print('hi 美男[%s],敢问路在何方' %person)
        print('%s回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问%s...' %(person,person_list))
        time.sleep(3)
        res=ask_way(person_list)
        # print('%s问的结果是: %res' %(person,res))
        return res
    res=ask_way(person_list)
    print(res)
    
    def calc(n):
        print(n)
        if int(n/2) ==0:
            return  n
        return calc(int(n/2))
    calc(10)
    
    ls =[]
    
    def test(n):
        n =int(n/2)
        ls.append(n)
        if int(n/2) ==1:
            return  ls
        test(n)
    
    print(test(5))
    View Code

    六:作用域

    def test1():  #函数名相当于内存地址,加括号test()相当于运行
        print('in the test1')  #没有返回值时,返回None
    def test():
        print('in the test')
        return  test1
    res=test()
    print(res())
    
    
    in the test
    in the test1
    None
    # 例一:
    name='alex'
    
    def foo():
        name='lhf'
        def bar():
            print(name)
        return bar
    
    func=foo()  #执行foo 将结果“返回bar”给func
    func()   #执行func即执行bar
    
    # 例二:
    name='alex'
    
    def foo():
        name='lhf'
        def bar():
            name='wupeiqi'
            def tt():
                print(name)
            return tt
        return bar
    
    func=foo()
    func()() #运行tt
    两个好例子

    七:匿名函数

    #这段代码
    def calc(n):
        return n**n
    print(calc(10))
     
    #换成匿名函数
    calc = lambda n:n**n
    print(calc(10))

    lambda 匿名函数(形参名):函数表达式(处理逻辑){ps:一般为return返回最终结果}

    name='alex'
    def change_name(x):
        return name+'_sb'
    res=change_name(name)
    print(res)
    
    f=lambda x:x+'_sb'
    res=f(name)
    print('匿名函数的运行结果',res)

     下一集:函数式编程。。。

  • 相关阅读:
    Spring mvc配置
    css选择器
    网页全屏背景设计
    2018年的第一篇
    总结2016,规划2017
    Jenkins上Git ssh登陆配置
    Jenkins构建项目,JAVA_HOME is not defined correctly
    运行Jmeter.bat出错:Not able to find java executor or version. Please check your installation. errorlevel=2
    Selenium获取input值的两种方法:WebElement.getAttribute("value")和WebElement.getText()
    Jmeter
  • 原文地址:https://www.cnblogs.com/xyd134/p/6437372.html
Copyright © 2011-2022 走看看