zoukankan      html  css  js  c++  java
  • python笔记05-----函数

    函数

    编程序语言中函数定义:函数是逻辑结构化和过程化的一种编程方法

    1 def func(i):        # def :定义函数的关键字;func:函数名;()内可以定义形参
    2    i += 1          # 代码块或程序处理逻辑
    3    return i         # 定义返回值
    4 
    5 f = func(10)         # 函数调用,传参 传了一个10
    6 print(f)            # 返回结果就是 10 += 1 也就是11

    1.1 有返回值和无返回值

    1 def test1():
    2   print("in test1")
    3 
    4 def test2():
    5   print("in test2")
    6   return 1
    7 
    8 print(test1())
    9 print(test2())

    结果

    in test1
    None
    in test2
    1

    1.2 函数的参数

    返回值:函数执行的结果

    1 def test1():
    2   return 0
    3 
    4 def test2():
    5   return 1,'hello',[1,2,3,4,5]
    6 
    7 print("test1:",test1())
    8 print("test2:",test2())

     结果

    test1: 0
    test2: (1, 'hello', [1, 2, 3, 4, 5])

    1.3 位置参数

    1 def test(x,y,z):
    2   print(x)
    3   print(y)
    4   print(z)
    5 
    6 test("hostname","port","IP")          #默认按顺序 ,也可以指定:test("hostname",z="port",y="IP")

    结果

    hostname
    port
    IP

    1.4 默认参数

    1 def test(x,y=2):
    2   print(x)
    3   print(y)
    4 
    5 test(1)     #默认参数调用的时候,非必需传递,如果指定传递,按照指定的参数>默认参数优先级

    结果

    1

    2

    1.5 参数组

    1 def test(*x):
    2   print(x)
    3 
    4 test("bj","sh")
    5 test(*["bj","sh"])           #结果都是返回元组

    ('bj', 'sh')
    ('bj', 'sh')

    1.6 动态参数*args 和**kwargs

    *args 可以传各种类型:列表,字典,元组,集合,字符串,数字等

     1 def test(*args):
     2   print(args)
     3 
     4 
     5 test("1","w","s","y")
     6 test(1,2,3,4,5,6)
     7 test(["name","age","sex"])
     8 test(("name",))
     9 
    10 test({"name":"boy","age":10})

    结果

    ('1', 'w', 's', 'y')
    (1, 2, 3, 4, 5, 6)
    (['name', 'age', 'sex'],)
    (('name',),)
    ({'name': 'boy', 'age': 10},)

    **kwargs 传指定 最后输出字典

    1 def test1(**kwargs):
    2   print(kwargs)
    3 
    4 test1(name="kk",age=18,sex="man") #传出来结果为字典

    结果

    {'name': 'kk', 'age': 18, 'sex': 'man'}

    1.7 全局变量与局部变量

    全局与局部变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量

    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

    当全局变量与局部变量同名时

    在定义局部变量的子程序内,局部变量起作用,在其他地方全局变量起作用

    global      #定义新的全局变量

     1 home = "bj"
     2 name = "wang"
     3 
     4 def my_home(name):
     5   global home
     6   home = "hebei"
     7   name = "wsy"
     8   print("in func:",name,home)
     9 print(name)
    10 my_home(name)
    11 print(home)

     1.8 递归

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

    递归的特性:

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

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

      3.递归效率不高,递归层次过多导致栈溢出(在计算机中,函数调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧。由于栈的大小不是无限的,所有,递归调用次数过多,会导致栈溢出)

    1 递归实例:
    2 def num(x):
    3     print(x)
    4     y = int(x/2)
    5     if y > 0:
    6         return num(y)
    7     print("END:",x)
    8 
    9 num(20)

    输出结果

    20
    10
    5
    2
    1
    END: 1

    1.9 高阶函数和匿名函数

    高阶函数

    高阶函数的定义:一个函数接收另一个函数作为参数

    1 def add(a,b,c):
    2     return c(a) + c(b)
    3 
    4 res = add(6,-8,abs)     #abs 绝对值
    5 print(res)  

    结果为14

    匿名函数

    匿名函数:也叫lambda表达式

    1. 匿名函数的核心:一些简单的需要用函数去解决的问题,匿名函数的函数体只有一行

    2. 参数可以有多个,用逗号隔开

    3. 返回值和正常的函数一样可以是任意的数据类型

    计算两个数字之和
    a = lambda x,y:x+y #x,y 为传入的两个参数 print(a(1,3))
    a = lambda x,y,z,a:x+y+z+a    #可以定义多个参数
    print(a(1,3,4,6))

    将一个字典的key和value对调

    dic = {'name': "wsy", 'Age': 20}
    res = {dic[i]:i for i in dic}
    dic = res
    print(dic)

    结果

    {'wsy': 'name', 20: 'Age'}

    2.0 闭包

    闭包:

    内部的函数

    包含了对外部函数作用域中变量的引用

    def test():
        name = "wsy"
        def index():
            print("func is index" ,name)
    
        return index()
    test()

    结果:

    func is index wsy

    判断闭包函数的方法:__closure__

    def test():
        name = "wsy"
    
        def index():
            print("func is index" ,name)
        print(index.__closure__) #判断函数是否为闭包
        return index()
    test()

    结果:

    (<cell at 0x000000000203DE88: str object at 0x00000000020AFF80>,)

    func is index wsy

    如果变量在上一个函数体外,会返回None

  • 相关阅读:
    Python 包的概念
    EXCEL基础篇(二)
    EXCEL基础篇(一)
    JavaScript(四)Bom
    JavaScript(三)Dom查找、设置标签属性及内容、绑定事件
    erlang并发编程(二)
    OTP&ETS
    erlang中http请求
    erlang证书加密
    erlang并发编程
  • 原文地址:https://www.cnblogs.com/wsy1030/p/9014103.html
Copyright © 2011-2022 走看看