zoukankan      html  css  js  c++  java
  • 函数

    • 说明


    • 调用方式



    • 多个返回值

    • 比较PythonIC写法

    • 拆包

    嵌套函数拆包

    
    def fun01(*args,**kwargs):
        print(args)
        print(kwargs)
    fun01(1,23,4,5,6,age=19,name='yy')
    
    	>>
    (1, 23, 4, 5, 6)
    {'age': 19, 'name': 'yy'}
    
    
    嵌套函数中
    def fun02(*args,**kwargs):
        print(args)
        print(kwargs)   
        fun01(args,kwargs)
        print(args)
        print(kwargs)
    
    fun02(1,23,4,5,6,age=19,name='yy')
    
    >>>
    (1, 23, 4, 5, 6)
    {'age': 19, 'name': 'yy'}
    ((1, 23, 4, 5, 6), {'age': 19, 'name': 'yy'})
    {}
    (1, 23, 4, 5, 6)
    {'age': 19, 'name': 'yy'}
    
    • 变化的值

    • 变量

    • 引用


    • 递归函数

    • 匿名函数



    • 列表推导式
    1
    #一个列表保存一百个数字
    list = []
    for i in range(1,101):
        list.append(i)
    print(list)
    
    #推导式:[ 变量名 循环体]
    list = [i for i in range(1,101)]
    print(list)
    
    2
    #一个显示十个值的哈哈
    list = []
    #只是循环次数,不用变量,用占位符
    for _ in range(10):
        list.append('哈哈')
    print(list)
    #优化
    list = ['哈哈' for _ in range(10)]
    print(list)
    
    3
    #保存1-100偶数
    list = []
    for i in range(1,101):
        #判断偶数
        if i%2 == 0:
            list.append(i)
    print(list)
    #优化
    list = [i for i in range(1,101) if i%2==0]
    print(list)
    
    4
    #一个列表保存[(0,1),(0,1),(0,1),
    #               (1, 1),(1,1),(1,1) ]
    
    list = []
    for i in range(2):
        for j in range(3):
            #构造元组
             touple = (i,j)
             list.append(touple)
    print(list)
    
    #优化
    list = [(i,j) for i in range(2) for j in range(3)]
    print(list)
    
    5 
    #构造函数,   第一部分写出需要显示的,后面写条件
    my_list = [val for val in range(5) if val % 2 == 0]
    print(my_list)
    
    a = [x for x in range(100)]
    b = [a[y:y+3] for y in range(0,len(a),3)]
    print(b)
    
    • help

    help(obj) 显示对象的帮助信息

    • 装饰器 decorator

    • 闭包
    • 定义


    • 装饰有返回值的函数
      原函数有返回值,在login=func_out(login) 的理解上,对于有返回值的函数,
      如果还在原来的框架上,login最后指向执行内层函数,由于内层函数没有返回值,最后得到的只是none
      改变就是在内层函数中设置返回值,接受原函数的返回值。
    • 装饰有参数的函数
    def func_out(func):
        def func_in(*args,**kwargs):
            return func(*args,**kwargs)
    
        return func_in
    
    
    @func_out
    def login(*args,**kwargs):
        print(args)
        print(kwargs)
    
    # login = func_out(login)
    # login()  ==> func_in()
    # func ==> 原始的login
    
    login(10,20,30,age = "123",name = "456")
    
    • 装饰器参数
      如实例,设置参数的主动权在调用者,假如要把主动权拿回来,在设置装饰器的时候就给了参数,就引入了装饰器参数
    def func_out(func):
    	def func_in(data):
    		print(data)
    		func()
    	return func_in
    
    @func_out
    def main():
    	print('xxxxxxxxx')
    
    main('10')
    >>  10   xxxxxxxxxx
    
    

    -- 给装饰器参数

    def route(data):
        def func_out(func):
    	def func_in():
    	    print(data)
    	    func()
    	return func_in
         return func_out
    // 三层函数嵌套
    
    
    @route('10')
    def main():
        print('xxxxxxxxx')
    
    @route('10')  
        1先调用route函数,只是传参 data=10
        2 返回func_out  执行@func_out
        3 main = func_out(main)	
    这样就将参数由装饰器传入了
    
    main() 
    >>>  10   xxxxxxxxxx
    
    
    • 类装饰器

    在@Foo默认运行login=Foo(login)的时候,完成了实例化。login作为参数传入

    迭代器 iterator

    表面上是一个数据流对象或者容器,当使用其中的数据的时候,每次从数据流中取一个数据,直至取完,而且数据并不会被重复使用

    迭代器解决数据类型(存放数据的容器)和函数耦合的问题

    迭代器协议方法
    任何一个类,只要实现了或具有着两个方法,都可以成为迭代器

    • _iter_
      方法返回对象本身,是for语句使用迭代器的要求
    • _next_
      用于返回容器中下一个元素或数据,当容器中的数据用尽时,返回一个StopIteration异常

    生成器 yield

    • 备注
    1. 函数内嵌套函数时,当内层函数要使用外层变量,不是global 要使用nonlocal 设定外层变量
    2. import 模块。
      相当于调用的是某块的一个引用,此时如果引用体内要改变模块中的公共变量,其他文件要继续引用这个模块的话就是引用的更改过后的公共变量。
      from 模块 import *
      相当于把模块中的内容直接都拷贝到了当前文件中,此时更改公共变量的话,只是更改的当前的,源模块不收影响,其他文件要引用这个模块,还是没有更改前的变量。

    匿名函数lambda
    image.png

  • 相关阅读:
    python经典算法面试题1.5:如何找出单链表中的倒数第K个元素
    python经典面试算法题1.4:如何对链表进行重新排序
    巧妙利用引用,将数组转换成树形数组
    设计模式学习笔记
    Vue-cli项目部署到Nginx
    设计模式
    设计模式
    springboot原理
    类加载机制-深入理解jvm
    JVM内存调优原则及几种JVM内存调优方法
  • 原文地址:https://www.cnblogs.com/cizao/p/11481770.html
Copyright © 2011-2022 走看看