GVKun编程网logo

Python赋值运算符优先级-(a,b)= a [b] = {},5(python赋值运算符优先级最低吗)

12

在本文中,您将会了解到关于Python赋值运算符优先级-的新资讯,同时我们还将为您解释a,b=a[b]={},5的相关在本文中,我们将带你探索Python赋值运算符优先级-的奥秘,分析a,b=a[b]

在本文中,您将会了解到关于Python赋值运算符优先级-的新资讯,同时我们还将为您解释a,b= a [b] = {},5的相关在本文中,我们将带你探索Python赋值运算符优先级-的奥秘,分析a,b= a [b] = {},5的特点,并给出一些关于22.Python赋值运算符(入门必读)、7大运算符:(算数运算符,比较运算符,赋值运算符,成员运算符,身份运算符,逻辑运算符,位运算符)与其优先级关系、in和比较的python运算符优先级、Matlab VS Python-eig(A,B)VS sc.linalg.eig(A,B)的实用技巧。

本文目录一览:

Python赋值运算符优先级-(a,b)= a [b] = {},5(python赋值运算符优先级最低吗)

Python赋值运算符优先级-(a,b)= a [b] = {},5(python赋值运算符优先级最低吗)

我在Twitter上看到了这个Python代码段,并对输出感到困惑:

>>> a, b = a[b] = {}, 5>>> a{5: ({...}, 5)}

这里发生了什么?

答案1

小编典典

Assignment语句
文档中:

赋值语句评估表达式列表(请记住,它可以是单个表达式或逗号分隔的列表,后者产生一个元组),并将单个结果对象从左到右分配给每个目标列表。

您有两个分配目标列表;a, b,和a[b],该值{}, 5从左到右分配给这两个目标。

首先,将{}, 5元组解包到a, b。您现在有a = {}b = 5。注意这{}是可变的。

接下来,您将相同的字典和整数分配给a[b],其中a对字典求值,对b进行求值5,因此您5将字典中的键设置为元组,({},5)从而创建了循环引用。将{...}由此指相同的对象a已被引用。

由于分配是从左到右进行的,因此您可以将其细分为:

a, b = {}, 5a[b] = a, b

因此a[b][0]与以下对象相同a

>>> a, b = {}, 5>>> a[b] = a, b>>> a{5: ({...}, 5)}>>> a[b][0] is aTrue

22.Python赋值运算符(入门必读)

22.Python赋值运算符(入门必读)

赋值运算符主要用来为变量(或常量)赋值,在使用时,既可以直接用基本赋值运算符“=”将右侧的值赋给左侧的变量,右侧也可以在进行某些运算后再赋值给左侧的变量。

= 基本赋值运算符

Python 使用“=”作为赋值运算符,常用于将表达式的值赋给另一个变量。例如如下代码:

  1. # 为变量st赋值为Python
  2. st = "Python"
  3. # 为变量pi赋值为3.14
  4. pi = 3.14
  5. # 为变量visited赋值为True
  6. visited = True

除此之外,也可使用赋值运算利将一个变量的值赋给另一个变量。例如,如下代码也是正确的:

  1. # 将变量st的值赋给st2
  2. st2 = st
  3. print(st2)

值得指出的是,Python 的赋值表达式是有值的,赋值表达式的值就是被赋的值,因此 Python 支持连续赋值。例如,如下代码也是正确的:

a = b = c = 20

上面程序将 c=20。这个表达式的值赋给变量 b,由于赋值表达式本身也有值,就是被赋的值,因此 c=20 这个表达式的值就是 20,故 b 也被赋值为 20;依此类推,变量 a 也被赋值为 20。

赋值运算符还可用于将表达式的值赋给变量。例如,如下代码也是正确的:

  1. d1 = 12.34
  2. # 将表达式的值赋给d2
  3. d2 = d1 + 5
  4. # 输出d2的值
  5. print("d2的值为:%g" % d2 ) # 17.34


需要初学者特别注意的是,= 和 == 的含义完全不同,前者是赋值号,后者是等号,千万不要混淆。

扩展后的赋值运算符

= 赋值运算符还可与其他运算符(算术运算符、位运算符等)结合,成为功能更强大的赋值运算符,如表 1 所示。

表 1 Python 常用赋值运算符
运算符 说 明 举 例 展开形式
= 最基本的赋值运算 x = y x = y
+= 加赋值 x += y x = x + y
-= 减赋值 x -= y x = x - y
*= 乘赋值 x *= y x = x * y
/= 除赋值 x /= y x = x / y
%= 取余数赋值 x %= y x = x % y
**= 幂赋值 x **= y x = x ** y
//= 取整数赋值 x //= y x = x // y
&= 按位与赋值 x &= y x = x & y
|= 按位或赋值 x |= y x = x | y
^= 按位异或赋值 x ^= y x = x ^ y
<<= 左移赋值 x <<= y x = x << y,这里的 y 指的是左移的位数
>>= 右移赋值 x >>= y x = x >> y,这里的 y 指的是右移的位数

这里举几个简单的例子:

  1. a = 1
  2. b = 2
  3. a += b
  4. print("a+b=",a)#1+2=3
  5. a -= b
  6. print("a-b=",a)#3-2=1
  7. a *= b
  8. print("a*b=",a)#1*2=2
  9. a /= b
  10. print("a/b=",a)#2/2=1.0
  11. a %= b
  12. print("a%b=",a)#1%2=1.0
  13. c = 0
  14. d = 2
  15. c &= d
  16. print("c&d=",c)#0&2=0
  17. c |= d
  18. print("c|d=",c)#0|2=2

运行结果为:

a+b= 3
a-b= 1
a*b= 2
a/b= 1.0
a%b= 1.0
c&d= 0
c|d= 2

需要注意的是,程序中 a 的值通过 /= 和 %= 运算后,类型隐式改变成了浮点型,而浮点数是不能进行 &、|、^、<< 和 >> 运算的,否则 Python 解释器会报错(这些都属于位运算符,具体用法后续文章会详细介绍)。

通常情况下,只要能使用扩展后的赋值运算符,都推荐使用这种赋值运算符。

7大运算符:(算数运算符,比较运算符,赋值运算符,成员运算符,身份运算符,逻辑运算符,位运算符)与其优先级关系

7大运算符:(算数运算符,比较运算符,赋值运算符,成员运算符,身份运算符,逻辑运算符,位运算符)与其优先级关系

一,运算符(7种算数运算符,比较运算符,赋值运算符,成员运算符,身份运算符,逻辑运算符,位运算符)
优先级:

(1) 个别运算符:
    优先级最高 ** 幂运算
    优先级最低 =  赋值运算符
    () 括号可以提升运算优先级
     
(2) 整体 一元运算符 > 二元运算符
    一元运算符: 同一时间,只操作一个值 - ~
    二元运算符: 同一时间,操作两个值 + - * / ...
     
(3) 同一层级
    逻辑: () > not > and > or
    算数: 乘除 > 加减
    位运算符: ( << >> ) > & > ^ > |
 
(4) 其他运算符
    算数运算符 > 位运算符 > 比较运算符 > 身份运算符> 成员运算符 > 逻辑运算符
    赋值运算符是最后算完进行赋值,做收尾工作的.
"""
res = 5+5 << 6//3 is 40 and True
print(res)
 
"""
res = 10 << 2 is 40 and True
res = 40 is 40 and True
res = True and True
res = True
"""
# 加上括号包起来,让别人能看懂代码;
res = (5+5) << (6//3) is 40 and True

(1)算术运算符 + - * / // % **

var2 = 4
# + 
res = var1 + var2
print(res)
 
# -
res = var1 - var2
print(res)
 
# *
res = var1 * var2
print(res)
 
# / 除法 (结果为小数)
res = var1 / var2
res = 10 / 5
print(res)
 
 
# // 地板除 (返回整数)
res = 10 // 5
res = 11 // 4
print(res)
 
# 如果被除数或者除数是一个小数,结果加上.0
res = 11.0 // 4
print(res)
 
# % 取余
res = 11 % 4
res = -11 % 4  # -3 + 4 = 1
res = 11 % -4  # 3 + (-4) = -1
res = -11 % -4 # -3(如果被除数和除数都是负数,在正常得到的结果前面填上负号即可.)
print(res)
 
res = -17 % 7 # -3 + 7 = 4
res = 17 % -7 # 3 + (-7) = -4
res = -17 % -7 #-3
print(res)
 
# ** 幂运算
res = 3 ** 2
res = 3 ** 4
print(res)

(2)比较运算符> < >= <= == !=
比较运算符只会差生两种结果: True 真的 ,False 假的

var1 = 100
var2 = 100
 
res = var1 > var2
res = var1 < var2
res = var1 >= var2
res = var1 <= var2
print(res)
 
 
# 注意点
res = var1 == var2
print(res)

(3)赋值运算符

=  +=   -=  *=   /=   //=  %=    **=
# = 从右向左,将右侧的值赋值给左侧变量
var1 = 9
var2 = 2
 
 
# += 
"""var1 = var1 + var2"""
# var1 += var2
# print(var1)
 
# -=
"""var1 = var1 - var2"""
# var1 -= var2
# print(var1)
 
# *=
"""var1 = var1 * var2"""
# var1 *= var2
# print(var1)
 
# /=
"""var1 = var1 / var2"""
# var1 /= var2
# print(var1)
 
# //=
"""var1 = var1 // var2"""
# var1 //= var2
# print(var1)
 
# %= 
"""var1 = var1 % var2"""
# var1 %= var2
# print(var1)
 
# **=
"""var1 = var1 ** var2"""
var1 **= var2
print(var1)
 

(4)成员运算符:in 和 not in (针对于容器类型数据)

strvar = "雷霆嘎巴,无情哈拉少"
res = "雷" in strvar
res = "文" not in strvar
res = "无情" in strvar
res = "霆哈少" in strvar
res = '','' not in strvar
print(res)
 
 
# list tuple set
lst = ["余锐","高学峰","治理追","温子月","草神光"]
res = "高学峰" in lst
print(res)
 
tup = ("余锐","高学峰","治理追","温子月","草神光")
res = "李博伦" not in tup
print(res)
 
setvar = {"金角大王","银角大王","神秘男孩"}
res = "神秘男孩" in setvar
print(res)
 
# dict
""" in  和 not in 在字典中只判断键,不判断值 """
dic = {"yr":"英俊帅气","bx":"抠脚大汉","mcp":"高大威猛"}
 
res = "英俊帅气" in dic # False
res = "yr" in dic
res = "mcp" not in dic
print(res) 

(5)身份运算符: is和 is not(检测两个数据在内存当中是否是同一个值)

""" 字符串必须是一个连续的片段 """
strvar = "雷霆嘎巴,无情哈拉少"
res = "雷" in strvar
res = "文" not in strvar
res = "无情" in strvar
res = "霆哈少" in strvar
res = '','' not in strvar
print(res)
 
 
# list tuple set
lst = ["余锐","高学峰","治理追","温子月","草神光"]
res = "高学峰" in lst
print(res)
 
tup = ("余锐","高学峰","治理追","温子月","草神光")
res = "李博伦" not in tup
print(res)
 
setvar = {"金角大王","银角大王","神秘男孩"}
res = "神秘男孩" in setvar
print(res)
 
# dict
""" in  和 not in 在字典中只判断键,不判断值 """
dic = {"yr":"英俊帅气","bx":"抠脚大汉","mcp":"高大威猛"}
 
res = "英俊帅气" in dic # False
res = "yr" in dic
res = "mcp" not in dic
print(res) 


(6)逻辑运算符: and or not

# and 逻辑与
"""全真则真,一假则假"""
res = True and True   # True
res = True and False  # False
res = False and True  # False
res = False and False # False
print(res)
 
# or  逻辑或
"""全假则假,一真则真"""
res = True or True   # True
res = True or False  # True
res = False or True  # True
res = False or False # False
print(res)
 
# not 逻辑非
"""真变假,假变真"""
res = not True
res = not False
print(res)
 
# 逻辑短路:  如果出现了短路效果,后面的代码不执行
"""
短路:
(1) True or 表达式
(2) False and 表达式
"""
"""
True or print("紫月真胖呀")
True or True  => True
True or False => True
 
False and print("紫月真猛呀")
False and False => False
False and True  => False
"""
 
"""
bool 类型为假的十种情况
0 0.0 0j False '''' [] () {} set() None
先用大脑算一下布尔值真假,是否出现短路情况
如果出现了直接返回当前值,没出现,继续向右执行;
"""
 
 
res = 5 or 6
res = 0 or 6
res = 0 and 9
print(res)
逻辑运算符的优先级
() > not > and > or
eg:
res = 5 or 6 and 7 # 5 or 7 => 5
res = (5 or 6) and 7 # 5 and 7 => 7
res = not(5 or 6) and 7 # not 5 and 7 => False and 7 =>False
print(res)
 
 
res = 1>2 or 3<4 and 5>10 or 11<12 and 13>15 or 100<1000 and 1<2
# res = False or True and False or True and False or True and True
# res = False or False or False or True
# res = False or False or True
# res = False or True
# res = True
print(res)

(7)位运算符 & | ^ << >> ~

# 按位与 &
var1 = 19
var2 = 15
print(var1 & var2)
"""
19的二进制
0000 ... 10011
15的二进制
0000 ... 01111
 
0000 ... 10011
0000 ... 01111
0000 ... 00011 => 3
"""
 
# 按位或 |
var1 = 19
var2 = 15
print(var1 | var2)
"""
19的二进制
0000 ... 10011
15的二进制
0000 ... 01111
 
0000 ... 10011
0000 ... 01111
0000 ... 11111 => 31
"""
 
# 按位异或 ^ 两个值不一样,返回真,否则返回假
"""
1 0 => 1
1 1 => 0
0 0 => 0
0 1 => 1
"""
var1 = 19
var2 = 15
print(var1 ^ var2)
"""
19的二进制
0000 ... 10011
15的二进制
0000 ... 01111
 
0000 ... 10011
0000 ... 01111
0000 ... 11100 => 28
"""
 
 
# << 左移
""" 左移相当于做乘法 : 5 * 2的n次幂 """
res = 5 << 1 # 10
res = 5 << 2 # 20
res = 5 << 3 # 40
print(res)
"""
0000 ...  101
0000 ... 1010  移动一位 10
0000    10100  移动二位 20
"""
 
# >> 右移
""" 右移相当于做除法 : 5 // 2的n次幂 """
res = 5 >> 1 # 2
res = 5 >> 2 # 1
res = 5 >> 3 # 0
print(res)
"""
0000 ...  101
0000 ...  010  移动一位 2
0000 ...  001  移动二位 1
0000 ...  000  移动三位 0
"""
 
 
# ~ 按位非 (针对于补码进行操作,按位取反,包括符号位)
"""公式: -(n+1)"""
var1 = ~19
print(var1)
"""
~ 按位非每一位都取反,包括符号位,求反码每一位除了符号位,都取反.
 
原码:0000 ... 10011
反码:0000 ... 10011
补码:0000 ... 10011
 
补码:     0000 ... 10011
按位非:   1111 ... 01100
 
给你补码求原码:
补码: 1111 ... 01100
反码: 1000 ... 10011
原码: 1000 ... 10100 => -20
"""
 
var1 = ~(-22)
print(var1)
"""
原码: 1000 ... 10011
反码: 1111 ... 01100
补码: 1111 ... 01101
 
补码:    1111 ... 01101
按位非:  0000 ... 10010
 
给你补码求原码:
正数 : 补码 = 反码 = 原码
 
原码:  0000 ... 10010 => 18
"""

in和比较的python运算符优先级

in和比较的python运算符优先级

以下比较产生True

>>> '1' in '11'
True
>>> ('1' in '11') == True
True

而用括号代替,我得到一个TypeError:

>>> '1' in ('11' == True)
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
TypeError: argument of type 'bool' is not iterable

那我怎么False没有括号呢?

>>> '1' in '11' == True
False

Matlab VS Python-eig(A,B)VS sc.linalg.eig(A,B)

Matlab VS Python-eig(A,B)VS sc.linalg.eig(A,B)

我有以下矩阵sigma和sigmad:

sigma:

    1.9958   0.7250    0.7250   1.3167

sigmad:

    4.8889   1.1944    1.1944   4.2361

如果我尝试解决python中的广义特征值问题,则会获得:

    d,V = sc.linalg.eig(matrix(sigmad),matrix(sigma))

V:

    -1     -0.5614    -0.4352    1

如果我尝试在matlab中解决ge问题,我将获得:

    [V,d]=eig(sigmad,sigma)

V:

    -0.5897    -0.5278    -0.2564    0.9400

但是d确实是巧合。

答案1

小编典典

特征向量的任何(非零)标量倍数也将是特征向量。只有方向是有意义的,而不是整体规范化。不同的例程使用不同的约定-
通常您会看到幅度设置为1,或最大值设置为1或-1-某些例程甚至由于性能原因而没有内部一致性。您的两个不同结果是彼此的倍数:

In [227]: sc = array([[-1., -0.5614], [-0.4352,  1.    ]])In [228]: ml = array([[-.5897, -0.5278], [-0.2564, 0.94]])In [229]: sc/mlOut[229]: array([[ 1.69577751,  1.06366048],       [ 1.69734789,  1.06382979]])

因此它们实际上是相同的特征向量 将矩阵视为改变矢量的算子:特征矢量是特殊方向,指向该方向的矢量不会被矩阵扭曲,特征值是测量矩阵扩展或收缩矢量的因子。

今天的关于Python赋值运算符优先级-a,b= a [b] = {},5的分享已经结束,谢谢您的关注,如果想了解更多关于22.Python赋值运算符(入门必读)、7大运算符:(算数运算符,比较运算符,赋值运算符,成员运算符,身份运算符,逻辑运算符,位运算符)与其优先级关系、in和比较的python运算符优先级、Matlab VS Python-eig(A,B)VS sc.linalg.eig(A,B)的相关知识,请在本站进行查询。

本文标签: