• Python Day9-10


    一 定义1个函数

     无参函数的定义方法,就是def 后面加上函数名,函数名后面必须要有一个括号

      格式:def 函数名():

          函数体(也就是函数的功能)

    def aa():
        return 11
    a=aa()
    print(a)
     
    def bb():
        print(111)
    bb()
    
    
    输出结果
    11
    111

    有参函数的定义方法:def后面加上函数名,函数名的后面括号里传入一个参数。

      格式:def 函数名(参数):   (参数可以时任意的数据类型)

          函数体(函数的功能)

    def aa(a,b):
        return a,b
    bb=aa(1,2)
    print(bb)
     
    
    
    输出结果
    (1, 2)

    二 函数的参数

     在定义的阶段传入的参数,就叫做形式参数,简称形参,形参相当于一个变量名

     在调用阶段传传入的参数,就叫做实际参数,简称实参,实参相当于一个变量名的值

    def aa(a):   #a就是一个形参
        return a
    bb=aa(5)   #5 就是一个实参
    print(bb)
    
    输出结果
    
    5

        注意:在定义 阶段时可以传入多个参数,但是在定义阶段传入几个形参(*)星号除外,在调用阶段就传入几个形参。

    三 函数里面的return

     return:返回内容,也可以当终止符使用,一个函数只要遇见了return,执行完return,就会终止。

    def aa():
        print(123)
        return
        print(456)
    bb=aa()
    print(bb)
    
    输出结果
    
    123
    None

    调用时返回none的现象:1 直接返回的时None

                 2 没有return这个关键字

                 3 返回的内容为空

    def aa():
        pass
    a=aa()
    print(a)
     
    def bb():
        return
    b=bb()
    print(b)
     
    def cc():
        return None
    c=cc()
    print(c)
    
    
    输出结果
    None
    None
    None

    return可以返回多个内容,每个内容之间用逗号隔开,在调用时返回的值会以一个元组的格式返回。返回的值可以为任意的内容

    def aa():
        return 1,[2],'3',{4},(5),{6:7}
    a=aa()
    print(a)
    
    输出结果
    
    (1, [2], '3', {4}, 5, {6: 7})

    接收返回值:

      一个值接收,直到调用时遇见第一个return,就会返回第一个return返回的内容,然后终止这个函数

    def aa(x):
        return x
        return x+x
    a=aa(1)
    print(a)
    
    输出结果
    
    
    1

    多个值接受,返回的变量有几个,就要用几个值去接收返回的内容。

    def bb(x,y,z):
        return x,y,z
    b=bb(2,5,0)
    print(b)
    
    输出结果
    
    (2, 5, 0)

    函数里如果有print()打印,直接可以用函数名后面跟上一个括号去执行这个函数,如果在定义时函数传入了参数,在执行的时候也要传入相对应个数的参数值。

    def a():
        print(123)
    a()
     
    def b(x,y):
        print(x,y)
    b(3,4)
    
    
    输出结果
    
    123
    3 4

     

     三 详解: 函数

    def func(a,b):  #站在函数定义的角度上:位置参数  :必须传的参数
        print(a,b)
    
                    #站在调用函数的角度上
    func(1,2)         #按照位置传参
    func(b = 1,a = 2) #按照关键字传参
    func(1,b = 2)     #混用 : 必须先按照位置传参,再按照关键字传参
    
    输出结果
    
    1 2
    2 1
    1 2

      

       位置参数

          站在实参角度

         1.按照位置传值

    def mymax(x,y):
        #此时x=10,y=20
        

    if x > y :
           the_max = x 

    else
    y
    return the_max ma = mymax(10,20) print(ma) # 按照位置传参置传参,再按照关键字传参 输出结果 20

    2.按照关键字传值

    def mymax(x,y):
        #此时x = 20,y = 10
        print(x,y)
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(y = 10,x = 20)
    print(ma)
    
    # 按照关键字传参
    
    输出结果
    
    20 10
    20

    3.位置、关键字形式混着用

    def mymax(x,y):
        #此时x = 10,y = 20
        print(x,y)
        the_max = x if x > y else y
        return the_max
    
    ma = mymax(10,y = 20)
    print(ma)
    
    # 位置、关键字混用传参
    
    输出结果
    10 20
    20

     正确用法

          问题一:位置参数必须在关键字参数的前面

          问题二:对于一个形参只能赋值一次

                 站在定义函数的角度上——默认参数

    def welcome(name,sex='male'):  #sex默认参数
        print('welcome,%s,sex: %s'%(name,sex))
    
    welcome('黄中山')
    welcome('曹海娇')
    welcome('鲁旭彤','female')
    
    输出结果
    
    welcome,黄中山,sex: male
    welcome,曹海娇,sex: male
    welcome,鲁旭彤,sex: female
    def age(age,my_age=18):
        if age > my_age:
            return False
        else:
            return True
    
    def age(a1,a2=18):
        print(a1,a2)
    a2 = 20
    age(10)
    
    输出结果
    
    10 18

    默认参数
      是可以不传的参数
      如果不传默认是设置的默认值,如果传就用传入的值
      默认的值是在定义阶段就确定了
      默认参数的陷阱:针对可变的数据类型

    比较奇怪的例子:

    1

    def demo3(a=[]):
        a.append(1)
        print(a)
    
    demo3(a = [])
    demo3([])
    demo3([])
    
    
    输出结果
    
    [1]
    [1]
    [1]

    2

    def func(l = []):
        l.append(123)
        print(l)
    
    func()
    func([])
    func()   
    
    
    输出结果
    
    
    [123]
    [123]
    [123, 123]

    陷阱

    def defult_param(a,l = []):
        l.append(a)
        print(l)
    
    defult_param('alex')
    defult_param('egon')
    
    输出结果
    ['alex']
    ['alex', 'egon']

    动态参数

    计算元素之和

    1.普通用法

     def my_sum(a,b,c):
         sum_ret = a+b+c
         return sum_ret
    
     print(my_sum(1,2,3))
    
    输出结果
    
    6

    2.利用动态参数以后

    def my_sum(*args):
        count_sum = 0
        for i in args:
            count_sum += i
        return count_sum
    print(my_sum(1,2,3))
    
    
    输出结果
    6

    动态参数  
          站在函数定义的角度上:*做聚合用,将一个一个的参数组合成一个元组
          站在函数调用的角度上:*做打散用,将一个列表或者元组打散成多个参数
          *只针对按位置传参

       **动态参数,接受按关键字传递过来的参数,组织成一个字典

    def demo4(**kwargs):  #*args **kwargs
        print(kwargs)
    
    #demo4(a = 1,b = 2,c = 3)
    d = {'a': 1, 'b': 2, 'c': 3}
    demo4(**d)  #demo4(a = 1,b = 2,c = 3)
    
    
    输出结果
    {'a': 1, 'b': 2, 'c': 3}

    站在传参角度:按位置 按关键字

    def demo5(*args,**kwargs):
        print(args)
        print(kwargs)
    
    demo5(1,2,3,a=10,b=20)   #必须按照
    t = (1, 2, 3)
    d = {'a': 10, 'b': 20}
    demo5(*t,**d)
    
    
    输出结果
    
    (1, 2, 3)
    {'a': 10, 'b': 20}
    (1, 2, 3)
    {'a': 10, 'b': 20}

    站在函数定义的角度:所有的参数都是形式参数
            位置参数
       默认参数
       动态参数:*args,**kwargs

    站在函数调用的角度上:所有的参数都是实际参数
       按照位置传
       按照关键字传
       混用:按照位置传必须在关键字传参之前

    def func(位置参数1,位置参数2,*args,默认参数=10,**kwargs):
        print(位置参数1,位置参数2)
        print(默认参数)
        print(args)
        print(kwargs)
    
    func(1,2,3,4,5,默认参数='hahaha',a=10,b=20)
    func(1,2,3,4,5,a=10,b=20)
    
    
    输出结果
    
    1 2
    hahaha
    (3, 4, 5)
    {'a': 10, 'b': 20}
    1 2
    10
    (3, 4, 5)
    {'a': 10, 'b': 20}

    动态传参:*args,**kwargs组合在一起可以hold 100%所有的传参

     嵌套函数

    函数的嵌套调用

    def func():
        print(123)
    
    def func2():
        func()
        print(345)
    
    func2()
    print(234)
    
    
    输出结果
    123
    345
    234

    函数的嵌套定义

    def func():
        print(123)
        def func2():
            print(234)
        func2()
    
    func()
    
    输出结果
    
    123
    234

    两个重要例子:

    1.

    def func(x,y,z):
        print(x,y,z)
        def func_inner(a,b,c):
            print('func_inner',a,b,c)
        func_inner(x,y,z)
    
    func(4,5,6)
    
    输出结果
    
    4 5 6
    func_inner 4 5 6

    2.

    def func(*args,**kwargs):
        print(args)  #(1,2)   --> 1,2,3
        print(kwargs)  #{'c': 3}
        def func_inner(a,b,c):
            print('func_inner',a,b,c)
        func_inner(*args,**kwargs)
    
    func(1,b = 2,c = 3)
    
    输出结果
    
    (1,)
    {'b': 2, 'c': 3}
    func_inner 1 2 3

  • 相关阅读:
    机器学习技法2-Dual Support Vector Machine
    机器学习技法1-Linear Support Vector Machine
    Section 2.2
    Section 2.1 专题乱乱的
    Section 1.5 也许这才是暴力搜索
    usaco生成器
    Section 1.4 搜索
    Section 1.3
    Section 1.2.5 Dual Palindromes 水
    Section 1.2.4 Palindromic Squares 大水
  • 原文地址:https://www.cnblogs.com/liuduo/p/7447706.html
Copyright © 2020-2023  润新知