Blog

Python修改全局变量

Question #

Python函数内部不能直接用 += 等修改全局变量,但是对于 list 全局变量,却可以使用 append、extend 之类修改,这是为什么呢?

Answer #

当全局变量指向的对象不可变时,比如是整型、字符串等等,如果你尝试在函数内部改变它的值,却不加关键字 global,就会抛出异常:

x = 1
def func():
    x += 1
func()
x
## 输出
UnboundLocalError: local variable 'x' referenced before assignment

这是因为,程序默认函数内部的 x 是局部变量,而你没有为其赋值就直接引用,显然是不可行。不过,如果全局变量指向的对象是可变的,比如是列表、字典等等,你就可以在函数内部修改它了:

x = [1]
def func():
    x.append(2)
func()
x
## 输出
[1, 2]

需要注意的是,这里的x.append(2),并没有改变变量 x,x 依然指向原来的列表。事实上,这句话的意思是,访问 x 指向的列表,并在这个列表的末尾增加 2。

From #

14 | 答疑(一):列表和元组的内部实现是怎样的?

Python变量的赋值

Question #

Python中变量赋值的含义是什么?可变对象与不可变对象的修改对赋值后的变量有何影响?

Answer #

  • 变量的赋值,只是表示让变量指向了某个对象,并不表示拷贝对象给变量;
  • 而一个对象,可以被多个变量所指向。
  • 可变对象(列表,字典,集合等等)的改变,会影响所有指向该对象的变量。
  • 对于不可变对象(字符串、整型、元组等等),所有指向该对象的变量的值总是一样的,也不会改变。
  • 通过某些操作(+= 等等)更新不可变对象的值时,会返回一个新的对象。
  • 变量可以被删除,但是对象无法被删除。

From #

16 | 值传递,引用传递or其他,Python里参数是如何传递的?

Python通过函数修改变量值的两种方法

Question #

Python中想通过一个函数来改变某个变量的值,通常有哪两种方法?

Answer #

一种是直接将可变数据类型(比如列表,字典,集合)当作参数传入,直接在其上修改;

def my_func3(l2):
  l2.append(4)

l1 = [1, 2, 3]
my_func3(l1)
l1
[1, 2, 3, 4]

第二种则是创建一个新变量,来保存修改后的值,然后将其返回给原变量。

def my_func5(l2):
  l2 = l2 + [4]
  return l2

l1 = [1, 2, 3]
l1 = my_func5(l1)
l1
[1, 2, 3, 4]

From #

16 | 值传递,引用传递or其他,Python里参数是如何传递的?

Python变量的赋值 Python修改全局变量

sub:Extended Asm in GCC

基本语法 #

asm asm-qualifiers ( AssemblerTemplate
                 : OutputOperands
                 [ : InputOperands
                 [ : Clobbers ] ])

asm asm-qualifiers ( AssemblerTemplate
                      : OutputOperands
                      : InputOperands
                      : Clobbers
                      : GotoLabels)

asm关键词是GCC的扩展,若要与-ansi或各个-std选项兼容的话,可用_asm_

AssemblerTemplate OutputOperands InputOperands Clobbers(损坏部分)

序号占位符 操作约束(Constraints for asm Operands) 操作约束修饰符(Constraint Modifier Characters) atomic_add函数

GCC文档: Extended Asm - Assembler Instructions with C Expression Operands

sub:Financial Statements(财务报表)

会计恒等式 #

资产 = 负债 + 股东权益

分析上市公司的货币资金的基本原则 #

货币资金要与短期债务(能偿债)及经营需要(有资金运用能力)相匹配。

企业的三项活动 #

历史成本原则的第二层含义。

三大报表 #

分析 #

财务诡计 #

sub:TCP

0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

--------------------------------+

Source Port Destination Port

--------------------------------+

Sequence Number

--------------------------------+

Acknowledgment Number

--------------------------------+

Data C E U A P R S F
Offset Rsrvd W C R C S S Y I Window
R E G K H T N N

--------------------------------+

...