zoukankan      html  css  js  c++  java
  • Python 函数

    1. 函数的定义

    def func1():        # 带返回值的函数
        print('xiaojingzi')
        return 0
    
    def func2():        # 没有返回值的函数
        print('xiaojunzi')    
    
    func1()    # 调用函数

    2. 函数的参数

    2.1 形参与实参

    def fun(a, b)         # a, b 是形参 
        print(a + b)
    
    fun(2, 3)        # 2, 3是实参

    2.2 默认参数

    def person(name, age, country='China'):
        print(name)
        print(age)
        print(country)
    
    默认参数参数可以输入,也可以不输入,一般而言默认参数放在最后
    person('xiaojingzi', 20)
    person('xiaojunzi', 30, 'USA')

    2.3 关键参数

    def person(name, age):
        print(name)
        print(age)
    
    person('xiaojingzi', 30)
    person(age=10, name='xiaojingzi')    # 位置参数调用,形参一一对应,关键参数调用,不需要一一对应,

    2.4 非固定参数

    当不确定需要传入几个参数时,可以采用非固定参数

    def test(*args):       # 接收n个位置参数,转换成元组形式
        print(args[1])
    
    
    # 两种调用形式
    test(*[1, 2, 3, 4])
    test(1, 2, 3, 4, 5)
    
    def tes(**kargs):     # n个关键字,转换成字典的格式
        print(kargs)
        print(kargs['name'])
        print(kargs['xiao'])
    
    
    tes(name='alex', age='8', sex='nv', xiao='xiaojingzi')
    tes(**{'name': 'alex', 'xiao': 'xkaojunzi'})      # 两种调用形式

    2.5 函数的变量

    def change_name():      
        name[0] = 'xiaojingzi'
        print('inside func', name)
    # 列表,字典,集合,类可以在函数中修改,整数,字符串不可以在函数中修改

    3. 递归函数

    def calc(n):
        if n < 10:
            pass
        else:
            print(n/2)
            return calc(n/2)
    
    calc(50)
    # 递归:1. 必须有一个明确的结束条件
    #2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    #3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    4.  匿名函数

    插入map()函数的用法:

    map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

    #1、当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq。 
    def f(x):
        return x*x
    print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    # 输出结果:
    [1, 4, 9, 10, 25, 36, 49, 64, 81]
    
    # 2. 当seq多于一个时,map可以并行(注意是并行)地对每个seq执行如下图所示的过程:
    
    # python3中可以处理类表长度不一致的情况,但无法处理类型不一致的情况,
    l4=map(lambda x,y:(x**y,x+y),[1,2,3],[1,2])
    for i in l4:
        print(i)
    #(1, 2)    (4, 4)
    
    l4=map(lambda x,y:(x**y,x+y),[1,2,3],[1,2,'a'])    # 报错
    for i in l4:
        print(i)

    匿名函数的使用

    res = map(lambda x:x**2,[1,5,7,4,8])
    for i in res:
        print(i)

    5. 高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

    def add(x,y,f):
        return f(x) + f(y)
     
     
    res = add(3,-6,abs)
    print(res)

    6.  内置函数

    内置参数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii 

    #compile
    f = open("函数递归.py")
    data =compile(f.read(),'','exec')
    exec(data)
    
    
    #print
    msg = "又回到最初的起点"
    f = open("tofile","w")
    print(msg,"记忆中你青涩的脸",sep="|",end="",file=f)
    
    
    # #slice
    # a = range(20)
    # pattern = slice(3,8,2)
    # for i in a[pattern]: #等于a[3:8:2]
    #     print(i)
    #
    #
    
    
    #memoryview
    #usage:
    #>>> memoryview(b'abcd')
    #<memory at 0x104069648>
    #在进行切片并赋值数据时,不需要重新copy原列表数据,可以直接映射原数据内存,
    import time
    for n in (100000, 200000, 300000, 400000):
        data = b'x'*n
        start = time.time()
        b = data
        while b:
            b = b[1:]
        print('bytes', n, time.time()-start)
    
    for n in (100000, 200000, 300000, 400000):
        data = b'x'*n
        start = time.time()
        b = memoryview(data)
        while b:
            b = b[1:]
        print('memoryview', n, time.time()-start)
    
    几个内置方法用法提醒
  • 相关阅读:
    .java中如何实现序列化,有什么意义
    缓存穿透
    缓存击穿
    缓存雪崩
    redis缓存预热
    Docket 的常用命令
    数据库优化方法
    servlet和jsp的区别:
    6原则1法则
    学习IntelliJ IDEA(二)模块
  • 原文地址:https://www.cnblogs.com/feng-ying/p/9398191.html
Copyright © 2011-2022 走看看