首页
学习
活动
专区
圈层
工具
发布

Python最令人困惑的操作符

这是Python中两种不同类型的可迭代一维数组,它们之间只有一个键差。元组是不可变的结构,这意味着一旦定义,元组就不能被更改。列表当然是可变的,它包含了像append()这样的方法。...然而,Python仍然具有试图改变不可变类型时可能会出现的抛出。考虑到这个功能,我们可以预期下面的代码会显示一个错误,说明元组是不可变的。...letters[0] += "Q" 正如预期的那样,我们得到了另一个类型错误,因为元组一旦创建就不能更改。但是,只有在对数据结构调用操作符后才会抛出此类型错误。...这就是为什么正等号这么棒的部分原因! 仔细看看 04 现在我们已经知道了加号等于运算符有多奇怪,为了更好地理解其用法中的怪异之处,让我们来看看该运算符实际上是如何工作的。...当然,这将是这个操作符上相同函数的Python实现的一个更粗略的版本。代码看起来就像我们期望的那样: def plusequals(num1, num2): total = num1.

82210

python从入门到放弃(二)

a,但是我们在后面加上了等号,现在a就等于1了,a就是变量,这个让a=1的过程就是赋值 那可能有人可能会问,为什么要加变量,这段代码中效果不明显,下面做个示范 //现在我们要实现输出一个计算题的结果 print...c,在用print打印出c的结果即可 变量名的命名规则 变量名不能以数字开头 不能是python语法中的关键字 只能是数字,字母,下划线 不要用汉语拼音命名 变量名不要过长 推荐使用拼接语法,驼峰体 代码的运行顺序...a = 1 b = 2 a+b = c c = 100 通过上面讲到的赋值方法,计算这个题应该等于多少呢?...没错,这道题等于100 为什么呢?!...上面的代码就是字符串的相加 那能不能像乘呢,当然可以 num = '6' print(num*3) # 输出的结果就是打印三遍变量num;666 三引号的用法 三引号可以让内容分行显示,像古诗那样 print

76110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python mutable 和 imm

    啊哈,看到这个的时候,自己傻眼了,貌似对于学了半年的python的我来说,只了解2,3,4,9和11啊,其中5,10只是略懂,可是1,7基本没有听过,那好吧,这几天就根据这些提示来逐步解释python的面纱...,这以为着python为其重新分配了内存空间,而不是像c那样修改内存空间的值。...C里面的引用一样,如果是那样的话,按理说这里的a,b的值应该一致的,可是还是让我大吃一惊。...,既然1,2也是对象,而且还是immutable,当然不能被b修改,所以会为b重新开辟空间存放这个immutable的对象2。...那么在python那些是immutable呢? numbers, strings, tuples, frozensets 其实,还有一种特殊情况,就是自定义的类型呢?

    45710

    Python 中那些令人防不胜防的坑(二)

    大家好,我是 Rocky0429,一个正在学习 Python 的蒟蒻... 人不能两次踏入同一条河流,在无数次踩进同样的坑里之后,我觉得我有必要整理一下,这是 Python 防坑系列第二篇。...明明我们的函数里明明对默认的可变参数赋值了,为什么第 1 次调用是初始化的状态,第 2 次,第 3 次出现的结果就不是我们想要的了呢?...我猜大多数人看到这个结果都会很懵圈,就算不说结果,很多人看到最开始的那行代码,也会觉得没有头脑,下面就让我来详细的说一下,为什么是这样。...下面我结合这个赋值语句的形式和文章开头的代码详细说一下为什么会出现这样一个我们猜不到的结果: 首先是 (target_list "=")+,前面好容易理解,后面带着的 + 意味着可以有一个或者多个的目标列表...这是事实,但是当列表被嵌套的时候产生的效果就不见得是我们想的那样。

    46610

    线程安全的queue-浅谈线程安全那些事儿

    可事实却并不是你想的那样,不管你运行多少次,每次输出的结果都会不一样,而这些输出结果都有一个特点是,都小于 200 万。   ...实现人工原子操作   在多线程下,我们并不能保证我们的代码都具有原子性,因此如何让我们的代码变得具有 “原子性” ,就是一件很重要的事。   ...为什么 Queue 是线程安全的?   Python 的 模块里的消息通信机制主要有如下三种:   使用最多的是 Queue,而我们都知道它是线程安全的。...当我们对它进行写入和提取的操作不会被中断而导致错误,这也是我们在使用队列时,不需要额外加锁的原因。   他是如何做到的呢?   ...其根本原因就是 Queue 实现了锁原语,因此他能像第三节那样实现人工原子操作。

    58520

    python面试题精讲——monkey patch(猴子补丁)

    前言 本次依然是选自python面试题系列,将一个比较偏的概念,可能很多人没怎么听说过——猴子补丁,其实所讲的内容很简单,它得益于python灵活的语法、一切皆对象的思想,一起来看看看看吧!...为什么叫猴子补丁?...,才改变了func a.func() '''运行结果 Hi, monkey ''' 就这么简单,其实这根本的原因在于Python语法的灵活性,方法可以像普通对象那样使用。...,因为func有一个参数,如果这个函数没有参数的话不能这样直接赋值 print("Hi,outer monkey") a = A() A.func=outer_monkey a.func()...'''运行结果 Hi, outer monkey ''' 将类外面的普通方法依然可以在程序运行的时候动态赋值给类的某一个方法。

    8K40

    编程时常见的8种错误

    (Y/N)"; cin>>x; } 上面的代码会将是一个死循环~~像风一样自由~~~ 代码在循环条件判断时使用了一个等号来检查是否相等,实际上程序在执行时会把表达式右边的值赋给左边的变量,实际上是执行了变量的赋值...因此要解决上面的问题需要做如下改动: 使用==检查是否相等; 为了避免意外赋值,将变量放在表达式的右侧,如果不小心使用了一个等号,就会出现编译错误,因为不能将值赋给非变量的东西。...,为什么sum还是会得出一个异常值呢?...在C++中,一旦给某一个变量赋值后,这个变量的值就不会改变,除非给他重新赋值。...while(count<100) { cout<<count<<";"; count++; } return 0; } 上面的代码在执行时,并不能像预期的那样进入

    93610

    编程时常见的8种错误

    (Y/N)"; cin>>x; } 上面的代码会将是一个死循环~~像风一样自由~~~ 代码在循环条件判断时使用了一个等号来检查是否相等,实际上程序在执行时会把表达式右边的值赋给左边的变量,实际上是执行了变量的赋值...因此要解决上面的问题需要做如下改动: 使用==检查是否相等; 为了避免意外赋值,将变量放在表达式的右侧,如果不小心使用了一个等号,就会出现编译错误,因为不能将值赋给非变量的东西。...,为什么sum还是会得出一个异常值呢?...在C++中,一旦给某一个变量赋值后,这个变量的值就不会改变,除非给他重新赋值。...{ cout<<count<<";"; count++; } return 0; } 上面的代码在执行时,并不能像预期的那样进入

    1.2K40

    python学习笔记(第一章)

    break name = input("请重新输入天钧最想听的一句话") print("卧槽,牛逼啊小伙子,猜对了") 笔记;因为Python不像C语言那样的强结构语言,所以我学完C就开始学Python...,脑袋嗡嗡的,不过还好,它的赋值很不一般,像C语言第一条应该是先申请一个变量然后在接收赋值,但Python不一样,直接因为赋值是什么类型就变成什么类型的变量。...什么是while循环 大概是这个样子的[注意消失多年的灵魂画手上线了] ? 这不跟C语言一样的吗,没错就是一样的哈哈哈,指的是原理,别把C语言的格式写进Python代码,下场很惨的。...输出了空格在每个数之间 range() 这个是 for 的好伙伴哦 for i in range(1,33,4): print(i) 那么这个函数是什么意思呢,书上没过多解释,我的理解是就像枪一样,...就这样像子弹一样发射出去,大家有没有发现一个有趣的事情,为什么我填的是5最后到4就停止发射了呢,这是因为range是从0开始数的一共5个数,所以到4就停止了。

    58720

    如何通过学校系统漏洞注册到 @edu.cn 邮箱账号?

    不过像一部电影所说的那样“没有绝对安全的系统”,有时候如果多动一下脑子并不需要“进谷歌,找注入;没注入,就旁注;没旁注,用Oday... ...”等一些繁琐的工作就可以达到目的。...开始 在我们学校的官网上有一个邮箱服务的入口: [邮箱服务] 点进去之后如下图所示: [显示] 不过这里仅仅是留给老师申请和更改密码的入口!当我试图注册的时候就给出了下图中不能注册的提示。...再仔细看看【进入系统】这个板块,下面还有这么一大块空白,会不会因为我是以学生身份登录的所以才只显示学生常用的系统而不会显示其他的呢?...打开链接之后像预期的结果一样,突然多出来了好几个系统入口: [系统] 在最后面出现了【邮箱注册】,我也不确定通过这个链接是否能够注册。...为什么局域网的IP普遍是192.168开头? 我是如何获取到全校学生的证件照? 如何制作一个钓鱼网站? 阅读更多文章请关注微信公众号:Worldhello或者用微信扫描下方二维码!

    4.6K20

    【Linux系统编程】环境变量详解

    那我问大家,我们写的.C的文件生成的可执行程序,我们可以像指令那样去执行它来完成相应的任务。 那这个可执行程序可以叫做指令嘛?.../的定位方式其实是相对路径,那用绝对路径是不是也可以执行这个可执行文件? 这当然也是可以的。 但是它为什么就不能像ls哪些基本命令那样无需指明路径直接执行呢?...2.2 切入点2 那如果我想让我们自己的可执行程序像ls这些基本命令那般可以直接执行而无需指明路径,应该怎么实现呢? 那经过上面的学习,我们知道为啥我们自己的可执行程序不能直接运行而需要指明路径啊?...那我现在把当前目录下面的这个myproc删掉 然后我现在像执行ls那样直接执行myproc 是可以的,并且我们which命令也可以查到。...比如我们把自己写的可执行程序的路径添加到了PATH环境变量中,使得我们运行自己的可执行程序时可以像基本命令ls那样无需指定完整路径,直接可以运行。 但是呢?

    53010

    我要偷偷的学Python,然后惊呆所有人(第一天)

    Guido希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程。...最后,小数形式的字符串,由于Python的语法规则,也不能使用int()函数强制转换。 虽然浮点形式的字符串,不能使用int()函数。...所以,当你在函数的括号内写出问题时,input()函数会将此问题原样显示在屏幕上,并在终端区域等待你针对此问题的回答。 可是,我们为什么要在终端处输入回答呢?不输入行不行?...:后、下一行内容的前面,会空几个格,但这是为什么呢?...elif后可不接else if嵌套 像这种如果底下还有如果(即条件里还套条件)的情况,我们如何用Python把上面的规则写出来,并得出评价呢? 答案就是——嵌套条件。

    65520

    编写快速安全Bash脚本的建议

    使用它来使您的shell脚本更好! 我们会像讨论编程语言一样讨论bash,因为,怎么说呢,它就是。 这篇文章的目标不是bash编程详解。我不会在bash中做复杂的编程,也真的不计划学习如何去做。...所以如果你运行export MYVAR=2; python test.py,python程序将MYVAR设置为2。 第二种变量是 全局变量 。同样像上面那样赋值。...if 的事:我今天学到是不需要通过[[或者[去使用 if 语句:任何有效的命令都会工作。...我肯定不能。 总是引用你的 bash 变量,你会更快乐的。 返回代码, &&, 和 `|| 每个 Unix 程序都有一个“返回代码”,它是一个从0到127的整数。0表示成功,其他都意味着失败。...由于某种原因,fg 需要一个 “job ID”(这就是 jobs 打印输出的)而不是一个 PID。 谁知道 Bash 为什么这样子呢。

    2.3K80

    为什么 Python、Go 和 Rust 都不支持三元运算符?

    在许多编程语言中,最常见的写法是三元运算符,但是,Python 并不支持三元运算符,无独有偶,两个最热门的新兴语言 Go 和 Rust 也不支持! 为什么 Python 不支持三元运算符呢?...因此,PEP-308 被重开和更新,并很快就在次年的 2.5 版本中实现了。 前文已提到过这个让一些人感觉不舒服的方案了,因为它没有将条件判断逻辑放在最前面。 那么,为什么最后的胜者会是它呢?...为什么三元运算符在 Rust 是多余的呢?...语句(statement)通常指的是完成某个任务的单个指令或一组指令,例如赋值语句、条件语句、循环语句等,它没有返回值(或者为空),不能用于赋值操作。...回到本文的问题:为什么有些编程语言不采用主流的三元运算符语法呢? 不可否认,“?:”确实是一种简洁好用的设计,然而,标点符号的负面影响是过于抽象,可读性并不及“if-else”那样强。

    4.6K10

    深度辨析 Python 的 eval() 与 exec()

    2、exec 的基本用法 语法:exec(object[, globals[, locals]]) 在 Python2 中 exec 是个语句,而 Python3 将其改造成一个函数,像 print 一样...主要的区别是,exec() 的第一个参数不是表达式,而是代码块,这意味着两点:一是它不能做表达式求值并返回出去,二是它可以执行复杂的代码逻辑,相对而言功能更加强大,例如,当代码块中赋值了新的变量时,该变量可能...至于为什么 locals() 取出的结果有 y,为什么它不能代表真正的局部命名空间?为什么局部命名空间无法被动态修改?...4、为什么要慎用 eval() ? 很多动态的编程语言中都会有 eval() 函数,作用大同小异,但是,无一例外,人们会告诉你说,避免使用它。 为什么要慎用 eval() 呢?...5、安全的替代用法 既然有种种安全隐患,为什么要创造出这两个内置方法呢?为什么要使用它们呢? 理由很简单,因为 Python 是一门灵活的动态语言。

    82820

    关于C++中操作符重载的疑问 :四个运算符=, ->, [], ()不可以重载为全局函数(友员函数)

    C++规定有四个运算符 =, ->, [], ()不可以是全局域中的重载(即不能重载为友员函数),这是为什么呢?...那么为什么赋值运算符不可以重载为类的友元函数?像同样都是双目运算符的+为什么它就可以呢?...,执行赋值语句a = 7;程序会去调用类A中相应的赋值运算符重载函数,而不会像上面原来那样去调用有参构造函数。...像最初的赋值语句a = 7,执行时,实际做的操作是a(7)。而当类中有定义赋值运算符重载成员函数,执行赋值语句时,程序就只会去调用相应的赋值运算符重载函数。 ...程序是不允许有矛盾不确定选择的,所以当赋值运算符重载为类的友元函数时,编译器就会提示错误。 对于剩下的3个运算符 ->, [], () 为什么不能重载为友元函数,也是跟上面一样的道理。

    1.2K20

    ​golang的变量定义为什么还没有python简洁?

    golang的变量定义为什么还没有python简洁? 今天的内容其实不能算一篇文章,而是学习golang时遇到的一个比较有意思的问题。...问题2:变量声明 关于go的变量声明, go作为新起之秀,为什么不隐式声明,非得 := 这种方式呢?...像python 甚至 shell 声明变量的方式如下:i,j = 42, 2701go 的声明方式: i, j := 42, 2701 多一个:(冒号)不是增加了语言的复杂度吗,设计上还不如python...go是强类型语言,它不是python这种弱类型的脚本语言。所以它的赋值和初始化本应该像c++一样提前先声明类型才能使用。但为了兼顾易用性,:=是go提供的赋值和初始化的语法糖。...python这种弱类型语言可以不用先声明类型,它牺牲了运行效率,提高了开发效率 这个和效率高低有多大关系呢?go只是少了编译的过程。

    1.2K20

    为什么Julia比Python快?因为天生理念就更先进啊

    其实像以前 C 或其它主流语言在使用变量前先要声明变量的具体类型,而 Python 并不需要,赋值什么数据,变量就是什么类型。...选择 Julia 的最主要原因:要比其他脚本语言快得多,让你拥有 Python/Matlab /R 一样快速的开发速度,同时像 C/Fortan 那样高效的运行速度。...此外,这一核心决策同时还能像脚本语言那样令语法非常简洁,这两者相加可以得到非常明显的性能增益。...如果在 MATLAB,Python 或 R 中执行这个操作,则不会抛出错误,这是因为那些语言没有围绕类型稳定性构建整个语言。 当我们没有类型稳定性时会发生什么呢?...我们可以使用类型不稳定的函数,它会变得像 MATLAB/R/Python 那样慢。如果我们并不需要顶尖的性能,我们可以使用这些便捷的方式。

    2.1K60

    Python: 链式赋值的坑

    在我们使用Python的过程中, 经常遇到赋值语句, 就像下面的那样: a = 3 b = 3 可能你会觉得我又要说什么变量赋值就是引用, 这么简单的知识就不讨论啦, 相信聪明的大家肯定都知道的, 我想讲的是链式赋值...可能大家一眼看下去, 就能得出答案: i 的值: 3 s 的值: [3, 2, 3, 4, 5, 6] 然而, 这个答案只是对了一半, 因为s的值错了!...第3行: LOAD_CONST取出常量3, 它并不是像上面执行STORE_NAME, 而是采用DUP_TOP, 这是什么鬼, 我们这要去看下这指令具体是干嘛的: //取自 python/ceval.c...(省略) } DUP_TOP指令说白了, 就是将刚才LOAD_CONST指令取出的常量3, 复制一份给v,然后再压回去运行栈帧, 这样就有两个3了, 为什么要这么做, 肯呢个大家已经猜到了, 不过我们还是得继续看具体是不是像我们想的那样...所以看到这, 相信大家都能清楚, 为什么结果是 [1, 2, 3, 3, 5, 6] 这跟我们想象中的链式赋值很不同, 我们以前总是觉得, 赋值要从右到左依次执行, 先执行 s[i] = 3, 再执行

    1.3K10
    领券