在本文中,您将会了解到关于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赋值运算符优先级最低吗)
- 22.Python赋值运算符(入门必读)
- 7大运算符:(算数运算符,比较运算符,赋值运算符,成员运算符,身份运算符,逻辑运算符,位运算符)与其优先级关系
- in和比较的python运算符优先级
- Matlab VS Python-eig(A,B)VS sc.linalg.eig(A,B)
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赋值运算符(入门必读)
赋值运算符主要用来为变量(或常量)赋值,在使用时,既可以直接用基本赋值运算符“=”将右侧的值赋给左侧的变量,右侧也可以在进行某些运算后再赋值给左侧的变量。
= 基本赋值运算符
Python 使用“=”作为赋值运算符,常用于将表达式的值赋给另一个变量。例如如下代码:
- # 为变量st赋值为Python
- st = "Python"
- # 为变量pi赋值为3.14
- pi = 3.14
- # 为变量visited赋值为True
- visited = True
除此之外,也可使用赋值运算利将一个变量的值赋给另一个变量。例如,如下代码也是正确的:
- # 将变量st的值赋给st2
- st2 = st
- print(st2)
值得指出的是,Python 的赋值表达式是有值的,赋值表达式的值就是被赋的值,因此 Python 支持连续赋值。例如,如下代码也是正确的:
a = b = c = 20
上面程序将 c=20。这个表达式的值赋给变量 b,由于赋值表达式本身也有值,就是被赋的值,因此 c=20 这个表达式的值就是 20,故 b 也被赋值为 20;依此类推,变量 a 也被赋值为 20。
赋值运算符还可用于将表达式的值赋给变量。例如,如下代码也是正确的:
- d1 = 12.34
- # 将表达式的值赋给d2
- d2 = d1 + 5
- # 输出d2的值
- print("d2的值为:%g" % d2 ) # 17.34
需要初学者特别注意的是,= 和 == 的含义完全不同,前者是赋值号,后者是等号,千万不要混淆。
扩展后的赋值运算符
= 赋值运算符还可与其他运算符(算术运算符、位运算符等)结合,成为功能更强大的赋值运算符,如表 1 所示。
运算符 | 说 明 | 举 例 | 展开形式 |
= | 最基本的赋值运算 | 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 指的是右移的位数 |
这里举几个简单的例子:
- a = 1
- b = 2
- a += b
- print("a+b=",a)#1+2=3
- a -= b
- print("a-b=",a)#3-2=1
- a *= b
- print("a*b=",a)#1*2=2
- a /= b
- print("a/b=",a)#2/2=1.0
- a %= b
- print("a%b=",a)#1%2=1.0
- c = 0
- d = 2
- c &= d
- print("c&d=",c)#0&2=0
- c |= d
- 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种算数运算符,比较运算符,赋值运算符,成员运算符,身份运算符,逻辑运算符,位运算符)
优先级:
(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运算符优先级
以下比较产生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)
我有以下矩阵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)的相关知识,请在本站进行查询。
本文标签: