zoukankan      html  css  js  c++  java
  • Python之路——函数

    一、函数知识点补充

     1 #参数
     2     #没有参数
     3         #定义函数和调用函数时括号里都不写内容
     4     #有一个参数
     5         #传什么就是什么
     6     #有多个参数
     7         #位置参数
     8 
     9 
    10 #站在实参的角度上:
    11     #按照位置传参
    12     #按照关键字传参
    13     #混着用可以:但是 必须先按照位置传参,再按照关键字传参数
    14             #  不能给同一个变量传多个值
    15 
    16 #站在形参的角度上
    17     #位置参数:必须传,且有几个参数就传几个值
    18     #默认参数: 可以不传,如果不传就是用默认的参数,如果传了就用传的
    19 
    20 # 动态参数有两种:可以接受任意个参数
    21     #*args   : 接收的是按照位置传参的值,组织成一个元组
    22     #**kwargs: 接受的是按照关键字传参的值,组织成一个字典
    23     #args必须在kwargs之前
    24 # def func(*args,default=1,**kwargs):
    25 #     print(args,kwargs)
    26 # func(1,2,3,4,5,default=2,a='aaaa',b='bbbb')
    27 
    28 # def mysum(*args):
    29 #     the_sum = 0
    30 #     for i in args:
    31 #         the_sum += i
    32 #     return the_sum
    33 # the_sum = mysum(1,2,3,4)
    34 # print(the_sum)
    35 
    36 # def stu_info(**kwargs):
    37 #     print(kwargs)
    38 #     print(kwargs['name'],kwargs['sex'])
    39 #
    40 # stu_info(name = 'alex',sex = 'male')
    41 
    42 # 参数陷阱,默认参数是一个可变数据类型
    43 # def defult_param(a,l = []):
    44 #     l.append(a)
    45 #     print(l)
    46 #
    47 # defult_param('alex')
    48 # defult_param('egon')
    49 
    50 # def func(*args):  # 站在形参的角度上,给变量加上*,就是组合所有传来的值。
    51 #     print(args)
    52 #
    53 # func(1,2,3,4,5)
    54 # l = [1,2,3,4,5]
    55 # func(l)
    56 # func(*l)  # 站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散
    57 # def func(**kwargs):
    58 #     print(kwargs)
    59 # func(a=1,b=2)
    60 # d = {'a':1,'b':2}
    61 # func(**d)
    62 
    63 
    64 #函数的注释
    65 # def func():
    66 #     '''
    67 #     这个函数实现了什么功能
    68 #     参数1:
    69 #     参数2:
    70 #     :return: 是字符串或者列表的长度
    71 #     '''
    72 #     pass
     1 # 函数进阶
     2 
     3 # 命名空间和作用域
     4 #命名空间 有三种
     5 #内置命名空间 —— python解释器
     6     # 就是python解释器一启动就可以使用的名字存储在内置命名空间中
     7     # 内置的名字在启动解释器的时候被加载进内存里
     8 #全局命名空间 —— 我们写的代码但不是函数中的代码
     9     # 是在程序从上到下被执行的过程中依次加载进内存的
    10     # 放置了我们设置的所有变量名和函数名
    11 #局部命名空间 —— 函数
    12     # 就是函数内部定义的名字
    13     # 当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了
    14 
    15 #在局部:可以使用全局、内置命名空间中的名字
    16 #在全局:可以使用内置命名空间中的名字,但是不能用局部中使用
    17 #在内置:不能使用局部和全局的名字的
    18 
    19 #在正常情况下,直接使用内置的名字
    20 #当我们在全局定义了和内置名字空间中同名的名字时,会使用全局的名字
    21 #当我自己有的时候 我就不找我的上级要了
    22 #如果自己没有 就找上一级要 上一级没有再找上一级 如果内置的名字空间都没有 就报错
    23 # 多个函数应该拥有多个独立的局部名字空间,不互相共享
    24 
    25 
    26 # 作用域两种
    27 # 全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域  ——globals()
    28 # 局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域) ——locals()
    29 
    30 # a = 1
    31 # def func():
    32 #     global a
    33 #     a = 2
    34 #
    35 # func()
    36 # print(a)
    37 
    38 # 对于不可变数据类型 在局部可以查看全局作用域中的变量
    39 # 但是不能直接修改
    40 # 如果想要修改,需要在程序的一开始添加global声明
    41 # 如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效
    42 
    43 
    44 #globals 永远打印全局的名字
    45 #locals 输出什么 根据locals所在的位置
     1 # a = 1
     2 # b = 2
     3 # def func():
     4 #     x = 'aaa'
     5 #     y = 'bbb'
     6 #     print(locals())
     7 #     print(globals())
     8 #
     9 # func()
    10 # print(globals())
    11 # print(locals()) #本地的

     函数的闭包

     1 # 闭包
     2 # from urllib.request import urlopen
     3 # def get_url():
     4 #     url = 'https://y.qq.com/portal/player.html'
     5 #     def get():
     6 #         ret = urlopen(url).read()
     7 #         return ret
     8 #     return get
     9 # get = get_url()
    10 # h = get()
    11 # with open('xiaohua100','wb') as f:
    12 #     f.write(h)
    13 
    14 # def func():
    15 #     def func1(a):
    16 #         a += 1
    17 #         print(a)
    18 #         print('2',func1.__closure__)
    19 #     return func1
    20 # f = func()
    21 # print(f.__closure__)
    22 # print(func.__closure__)

    装饰器

     1 # def wrapper(func):
     2 #     def inner(*args,**kwargs):
     3 #         print('before')
     4 #         ret = func(*args,**kwargs)
     5 #         print('ends')
     6 #         return ret
     7 #     return inner
     8 #
     9 # @wrapper
    10 # def qqxing():
    11 #     print(123)
    12 #     return 456
    13 #
    14 # print(qqxing())

    装饰器进阶

     1 # from functools import wraps
     2 #
     3 # def deco(func):
     4 #     @wraps(func)    # 加在最内层函数正上方
     5 #     def wrapper(*args,**kwargs):
     6 #         return func(*args,**kwargs)
     7 #     return wrapper
     8 #
     9 # @deco
    10 # def index():
    11 #     '''hahaha'''
    12 #     print('from index')
    13 #
    14 # print(index.__name__)
    15 # print(index.__doc__)
    16 
    17 # 装饰器的固定格式
    18 # def timer(func):
    19 #     def inner(*args,**kwargs):
    20 #         '''执行函数之前要做的'''
    21 #         re = func(*args,**kwargs)
    22 #         '''执行函数之后要做的'''
    23 #         return re
    24 #     return inner
    25 
    26 
    27 #装饰器的固定格式——wraps版
    28 # from functools import wraps
    29 #
    30 # def deco(func):
    31 #     @wraps(func) #加在最内层函数正上方
    32 #     def wrapper(*args,**kwargs):
    33 #         return func(*args,**kwargs)
    34 #     return wrapper
    35 
    36 
    37 #带参数的装饰器
    38 # FLAG = True
    39 # def outer(flag):
    40 #     def timer(func):
    41 #         def inner(*args,**kwargs):
    42 #             if flag:
    43 #                 print('''执行函数前要做的''')
    44 #             re = func(*args,**kwargs)
    45 #             if flag:
    46 #                 print('''执行函数后要做的''')
    47 #             return re
    48 #         return inner
    49 #     return timer
    50 #
    51 # @outer(FLAG)
    52 # def func():
    53 #     print(111)
    54 #
    55 # func()
  • 相关阅读:
    枚举定义三个常量--遍历如下
    初始化和赋值的概念
    javascript 事件
    HTML 5 本地存储
    html5 说明
    JQuery 双击动态编辑
    ThinkPHP 3.2.2 事务
    PHP AJAX JSONP实现跨域请求使用实例
    chorme 插件
    frontend-tools
  • 原文地址:https://www.cnblogs.com/liuyankui163/p/8118152.html
Copyright © 2011-2022 走看看