zoukankan      html  css  js  c++  java
  • python global

    如果想在函数内部改变函数外的变量值,用global语句完成:

    在不传该变量值入函数的情况下要改变它的值:

    >>> a = 3
    >>> def f():
    ...     global a
    ...     a = a-1
    ...
    >>> f()
    >>> a
    2

    如果不声明global将会报错未找到:

    >>> a = 3
    >>> def f():
    ...     a = a-1
    ...
    >>> f()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in f
    UnboundLocalError: local variable 'a' referenced before assignment

    如果是将该变量传参进入函数时,则该变量不变:

    >>> def f(a):
    ...     a = a-1
    ...
    >>> f(a)
    >>> a
    3
    >>> def f(a):
    ...     a = a-1
    ...     return a
    ...
    >>> f(a)
    2
    >>> a
    3
    

    注意,这仅当a为数的时候,当a为list,set,dict,等可切片的时,不用声明global也会改变。

    a为tuple或str时也不会改变(注意因为tuple/str对象的不支持对其中单个元素/字符赋值如:a[0] = "0" #对字符串a第一个元素改变为“0”会报错)

    >>> a = (1,2,3,4)
    >>> a[2] = 1 # 不可对单个改变
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    >>> def f(a):
    ...     a = (3,4)
    ...     print(a)
    ...
    >>> f(a)
    (3, 4)
    >>> a
    (1, 2, 3, 4)
    
    #####################################
    
    >>> a = "asd"
    >>> def f(a):
    ...     a = a + "00"
    ...     print(a)
    ...
    >>> f(a)
    asd00
    >>> a
    'asd'
    >>> a[0] = "0" # 不可对单个改变
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'str' object does not support item assignment

    对于list,set,dict,涉及到切片等操作时,则会改变:

    >>> a = [1,2,3,4]
    >>> def f(a):
    ...     a[-1] = "0"
    ...     print(a)
    ...
    >>> f(a)
    [1, 2, 3, '0']
    >>> a
    [1, 2, 3, '0']
    ##################上面切片下面未切片
    >>> a = [1,2,3,4]>>> def f(a):
    ...     a = [3,4]
    ...     print(a)
    ...
    >>> f(a)
    [3, 4]
    >>> a
    [1, 2, 3, 4]
    #######################
    >>> a = [1,2,3,4]
    >>> def f(a):
    ...     a.append(0)
    ...     print(a)
    ...
    >>> f(a)
    [1, 2, 3, 4, 0]
    >>> a
    [1, 2, 3, 4, 0]
  • 相关阅读:
    url 百分号解密
    16.UA池和代理池
    15.scrapy框架之日志等级、请求传参、提高scrapy框架的爬取效率
    14. scrip框架之5大核心组件和post请求
    13.scrapy 框架之递归解析(手动发送请求),
    12. scrapy 框架持续化存储
    11.scrapy框架简介和基础应用
    10. 移动端数据爬取
    09.python之网络爬虫之selenium、phantomJs和谷歌无头浏览器的自动化操作
    08 python之网络爬虫之乱码问题
  • 原文地址:https://www.cnblogs.com/cymwill/p/8592780.html
Copyright © 2011-2022 走看看