使用缩进,而不是括号 Python使用空白字符(tab和空格)来组织代码,而不是像其它语言,比如R、C++、JAVA和Perl那样使用括号。...当你将对象作为参数传递给函数时,新的局域变量创建了对原始对象的引用,而不是复制。如果在函数里绑定一个新对象到一个变量,这个变动不会反映到上一层。因此可以改变可变参数的内容。...如果可能的话,我推荐避免副作用,采用不可变的方式,即使要用到可变对象。 标量类型 Python的标准库中有一些内建的类型,用于处理数值数据、字符串、布尔值,和日期时间。...字符串对象有format方法,可以替换格式化的参数为字符串,产生一个新的字符串: In [74]: template = '{0:.2f} {1:s} are worth US${2:d}' 在这个字符串中...{1:s}表示格式化第二个参数为字符串。 {2:d}表示格式化第三个参数为一个整数。
"foo") 变量和参数 当在Python中为变量(或命名)赋值,可以在等号右边创建对这个变量的引用。...,新的局域变量创建了对原始对象的引用,而不是复制。...如果在函数里将一个新对象绑定到一个变量,这个操作不会影响到该函数(即函数圆括号以内的部分)以外“范围”的同名变量。因此,可以修改可变参数的内部值。...: 3 / 2 Out[57]: 1.5 要使用C语言风格的整除(即如果不是完整的整数,则删除小数部分),可以使用底除运算符//: In [58]: 3 // 2 Out[58]: 1 字符串 可以用单引号...: 'str' object does not support item assignment 如果需要修改字符串,必须用函数或方法创建一个新的字符串,例如使用字符串的replace方法: In [63
() SyntaxError: Unexpected token ) 函数声明后面必须是一个合法的语句,而()不是。...通常情况下,您不需要了解它们,因为您大多数情况下会因为您本不应该做的事情而得到更多的警告。 变量必须在严格模式下声明 在严格模式下,所有变量必须明确声明。这有助于防止拼写错误。...,而不是“在”块内部。...一个字符串和一个数字,然后将字符串转换为数字,并通过严格相等比较两个操作数。 1. 一个布尔值和一个非布尔值,然后将布尔值转换为数字并进行宽松比较(再次)。 1....这样的字的最低 3 位用作类型标记,以指示该值是对象、整数、双精度、字符串还是布尔值(正如你所看到的,即使这个早期引擎已经尽可能将数字存储为整数)。 对象的类型标记为 000。
为什么在IDLE中执行会提示语法错误呢? 答:应该在命令提示符环境执行,不是在Python开发环境中执行。...4.问:为什么使用pip命令安装扩展库是提示“不是内部或外部命令,也不是可运行的程序或批处理文件”?...答:在Python中,不可哈希(unhashable)和可变的意思是一样的。整数、实数、复数、字符串、元组这些是不可变的,或者说是可哈希的。而列表、字典、集合是可变的,或者说是不可哈希的。...19.问:已知x是一个字符,我想使用x+1得到下一个字符,为什么提示“TypeError: can only concatenate str (not "int") to str”呢?...24.问:我机器上明明是有test.txt这个文件的,为什么使用内置函数open()打开时提示文件不存在呢? 答:如果文件test.txt不在当前文件夹中,在打开或读写时必须指定完整路径。
{a, b} = {a: 1, b: 2} 不是有效的独立语法,因为左边的 {a, b} 被认为是一个块而不是对象字面量。...foo属性不是obj1自身的属性,而是继承自obj2的属性,解构赋值可以取到这个属性。...let { prop: x } = undefined; // TypeError let { prop: y } = null; // TypeError 函数参数的解构赋值 函数的参数也可以使用解构赋值...,通过对这个对象进行解构,得到变量x和y的值。...move的参数指定默认值,而不是为变量x和y指定默认值,所以会得到与前一种写法不同的结果。
注意,要使得Proxy起作用,必须针对Proxy实例(上例是proxy对象)进行操作,而不是针对目标对象(上例是空对象)进行操作。 如果handler没有设置任何拦截,那就等同于直接通向原对象。...值得注意的是,has方法拦截的是HasProperty操作,而不是HasOwnProperty操作,即has方法不判断一个属性是对象自身的属性,还是继承的属性。...注意,该方法只能返回布尔值,否则返回值会被自动转为布尔值。 这个方法有一个强限制,它的返回值必须与目标对象的isExtensible属性保持一致,否则就会抛出错误。...ownKeys方法返回的数组成员,只能是字符串或 Symbol 值。如果有其他类型的值,或者返回的根本不是数组,就会报错。...该方法必须返回一个布尔值,否则会被自动转为布尔值。
注意,要使得Proxy起作用,必须针对Proxy实例(上例是proxy对象)进行操作,而不是针对目标对象(上例是空对象)进行操作。 如果handler没有设置任何拦截,那就等同于直接通向原对象。...值得注意的是,has()方法拦截的是HasProperty操作,而不是HasOwnProperty操作,即has()方法不判断一个属性是对象自身的属性,还是继承的属性。...注意,construct()方法中的this指向的是handler,而不是实例对象。...注意,该方法只能返回布尔值,否则返回值会被自动转为布尔值。 这个方法有一个强限制,它的返回值必须与目标对象的isExtensible属性保持一致,否则就会抛出错误。...ownKeys()方法返回的数组成员,只能是字符串或 Symbol 值。如果有其他类型的值,或者返回的根本不是数组,就会报错。
解构赋值语法是一个Javascript表达式,这使得可以将值从数组或属性从对象提取到不同的变量中,文中主要讲数组的解构赋值、对象的解构赋值、字符串的解构赋值、数值和布尔值的解构赋值以及函数参数的解构赋值...等号的右边如果不是可遍历的机构则会报错: cdoe let [a] = 1; console.log(a); // TypeError: 1 is not iterable let [a] = false...*code let { foo, bar } = { bar: '我是bar', foo: '我是foo' } console.log(foo); // 我是foo console.log(bar...); // 我是bar 从代码中可以看出来对象解构赋值的时候是和顺序无关的,而属性名字就显得尤为重要。...length这个属性,因此我们还可以对该属性进行解构赋值: code let { length: len } = 'string'; console.log(len); // 6 数值和布尔值的解构赋值
一丶异常和错误 程序中有两种错误 1.语法错误(这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) ? ?....isspace(): print('输入的是空格,就执行我这里的逻辑') elif len(num1) == 0: print('输入的是空,就执行我这里的逻辑') else:...print('其他情情况,执行我这里的逻辑') ''' 问题一: 使用if的方式我们只为第一段代码加上了异常处理,但这些if,跟你的代码逻辑并无关系,这样你的代码会因为可读性差而不容易被看懂 问题二...我们是不是要用except把所有的异常都列一遍呀.那样太麻烦了,Python也想到了这个,所以Python提供了一个万能异常:Exception,他可以捕获任意异常 s1 = 'hello' try:...=2 # 只能接受一个布尔值 False assert 1==1 # 只能接受一个布尔值 False print(123456) if 1 == int(input()): pass else
2 3 4 对于 range() 函数,有几个注意点:(1)它表示的是左闭右开区间;(2)它接收的参数必须是整数,可以是负数,但不能是浮点数等其它类型;(3)它是不可变的序列类型,可以进行判断元素、查找元素...为什么不更规范点,令 range() 生成的是迭代器呢? 关于这个问题,我没找到官方解释,以下纯属个人观点 。...这样还有一个好处,即当作为参数的可迭代对象发生变化的时候,作为结果的迭代器因为是消耗型的,不会被错误地使用。...TypeError: unsupported operand type(s) for *: 'range' and 'int' 那么问题来了:同样是不可变序列,为什么字符串和元组就支持上述两种操作,而偏偏...4、小结 回顾全文,我得到了两个偏冷门的结论:range 是可迭代对象而不是迭代器;range 对象是不可变的等差序列。 若单纯看结论的话,你也许没有感触,或许还会说这没啥了不得啊。
的情况 console.log(bar); // 报错ReferenceError let bar = 2; 在let生命变量之前调用该变量则会报错,而var的处理方式是把声明提前而赋值操作保留在原地...(三)变量的解构赋值 这部分是ES6新加的一些赋值的方法,我每个部分给一个例子,只要别人的代码使用时能看懂就行。 1.数组解构赋值 以前,为变量赋值,只能直接指定值。...let {length : len} = 'hello'; len // 5 4.数值和布尔值的解构赋值 解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。...let { prop: x } = undefined; // TypeError let { prop: y } = null; // TypeError 5.函数参数的解构赋值 函数的参数也可以使用解构赋值...function add([x, y]){ return x + y; } add([1, 2]); // 3 上面代码中,函数add的参数表面上是一个数组,但在传入参数的那一刻,数组参数就被解构成变量
当你将对象作为参数传递给函数时,新的局域变量创建了对原始对象的引用,而不是复制。...return True except TypeError: # not iterable return False 这个函数会返回字符串以及大多数Python集合类型为True:...: isiterable(5) Out[31]: False 我总是用这个功能编写可以接受多种输入类型的函数。...字符串对象有format方法,可以替换格式化的参数为字符串,产生一个新的字符串: In [74]: template = '{0:.2f} {1:s} are worth US${2:d}' 在这个字符串中...{1:s}表示格式化第二个参数为字符串。 {2:d}表示格式化第三个参数为一个整数。
最近正在学习ES6,对于ES6的语法有一些自己的理解,想写这篇文章帮助跟我一样的新手快速入门ES6而不至于连代码都看不懂.至于开发环境的搭建什么的例如balel下载什么的,百度上有很多的教程了.我在这就不再赘述了...(三)变量的解构赋值 这部分是ES6新加的一些赋值的方法,我每个部分给一个例子,只要别人的代码使用时能看懂就行。 1.数组解构赋值 以前,为变量赋值,只能直接指定值。...let {length : len} = 'hello'; len // 5 4.数值和布尔值的解构赋值 解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。...let { prop: x } = undefined; // TypeError let { prop: y } = null; // TypeError 5.函数参数的解构赋值 函数的参数也可以使用解构赋值...function add([x, y]){ return x + y; } add([1, 2]); // 3 上面代码中,函数add的参数表面上是一个数组,但在传入参数的那一刻,数组参数就被解构成变量
值(Value): 值可以是字符串、数字、布尔值(true/false)、数组、对象或null。 如果值是字符串,则必须用双引号括起来。...这个过程是反序列化的一部分,即将数据从一种格式(在这个情况下是JSON字符串)转换成另一种格式(在这个情况下是Python的数据结构,如字典或列表)。...这个过程是序列化的一部分,即将数据从一种格式(在这个情况下是Python的数据结构,如字典或列表)转换成另一种格式(在这个情况下是JSON字符串)。...如果字典的键不是基本类型(即str, int, float, bool, None),则设置为True可以跳过这些键;否则将引发TypeError。...如果字典的键不是基本类型(即str, int, float, bool, None),则设置为True可以跳过这些键;否则将引发TypeError。
TypeError: Cannot convert a Symbol value to a string 下面介绍Set和Map Set: 类似数组,不同的是数组中元素是允许重复的,而Set里面的元素都是唯一的...可接受字符串、数组、对象等作为参数。 Map: 类似对象,不同的是对象中的key是字符串或数字,而Map中的key可以是任何数据类型。...(s1); // Set(4) {1, 2, 3, 4} console.log([...s1]); // [1, 2, 3, 4] 验证(2): 参数是字符串,也可以用于字符串去重 思路:[...new...Set(“xxx”)]可得到去重后的数组,再通过.join(‘’)转成字符串,即可得到去重后的字符串。...这意味着add两个空对象后,Set的size是2而不是1: let s1 = new Set({a:1},{b:1}) // Uncaught TypeError: object is not iterable
如果JSON字符串表示的是其他类型(如字符串、数字、布尔值、null),则返回相应的Python类型。...JSON文件中的字符串必须使用双引号(")来包围键和字符串值。...object_pairs_hook:一个可选的函数,类似于object_hook,但它用于处理解码后的有序对列表(即列表中的元素是二元组,而不是字典)。...lineno: 一个整数,表示错误发生的行号(如果JSON数据是分行的)。注意,这个属性可能不是所有Python版本或json模块实现中都可用。...colno: 一个整数,表示错误发生的列号(同样,如果JSON数据是分行的)。这个属性也可能不是所有实现中都可用。
,它的构造函数指向的了根构造函数Object,所以这时候p.constructor === Object ,而不是p.constructor === Person。...我们都知道计算机表示十进制是采用二进制表示的,所以 0.1 在二进制表示为// (0011) 表示循环0.1 = 2^-4 * 1.10011(0011)复制代码那么如何得到这个二进制的呢,我们可以来演算下小数算二进制和整数不同..."+" 操作符,如果有一个为字符串,那么都转化到字符串然后执行字符串拼接"-" 操作符,转换为数字,相减 (-a, a * 1 a/1) 都能进行隐式强制类型转换[] + {} 和 {} + []复制代码布尔值到数字...1 + true = 21 + false = 1转换为布尔值for 中第二个whileif三元表达式|| (逻辑或) && (逻辑与)左边的操作数符号不能被转换为数字能被转换为布尔值(都是 true)...但对于引用类型的数据(主要是对象和数组)来说,变量指向数据的内存地址,保存的只是一个指针,const只能保证这个指针是固定不变的,至于它指向的数据结构是不是可变的,就完全不能控制了。
写在def语句中函数名后面的变量通常叫做函数的形参(parameter),而调用函数的时候提供的值是实参(argument)或者成为参数。 我能改变参数吗?...'greeting' 错误的意思,按照我自己的理解就是,为参数greeting赋予了多个值。...为什么会这样呢? 位置参数和关键字参数混合使用的情况,位置参数是要放在关键字参数之前的。这里,不是这个原因。...,而不是在程序运行时。...因为x作为形参,是局部变量,而函数里通过global又定义x是全局变量,因此出现了错误提示中的错误。 嵌套作用域(闭包) python的函数是可以嵌套的,也就是说可以将一个函数放在另一个里面。
问:为什么 [1, 2, 3].map(parseInt) 返回 [1,NaN,NaN]? 答:parseInt函数的第二个参数表示要解析的数字的基数。该值介于 2 ~ 36 之间。...我来翻译一下这段话。 ToPrimitive 方法接受两个参数,一个是输入的值 input,一个是期望转换的类型 PreferredType。..." 返回 OrdinaryToPrimitive(input, hint) 抽象操作的结果 OrdinaryToPrimitive 而 OrdinaryToPrimitive 方法也接受两个参数,一个是输入的值...var a = 1, b = '2'; var c = a + b; // '12' 也许你会好奇,为什么不是将后面的 b 转换为 number 类型,最后得到3?...从图上看到如果转换后的两个值的 Type 有一个是 String 类型,那么就将两个值经过 toString 转换后串起来。因此最后得到了'12',而不是3。 我们还可以再看一个例子。
在win上加e参数,执行这个代码.不可以.类unix可以试试,我有空操作 我超级喜欢这种循环写法 我这个传参写法没有错,不知道这么久没有出来 与其他编程语言一样,Julia可以更改存储在变量中的值或改变其状态...交换两个变量,python 见怪不怪 代码01行定义了_ab变量,这个名称可以使用。代码03行定义了@ab,04行报错,虽然提示的是“=”错误,但可以推测出其实是变量名称错误。...代码05行直接输入了值1000,06行得到了一个输出结果。请注意,“!”(感叹号)不应该在变量名称中使用,因为以感叹号结尾的函数用于修改其参数。...比如下面的代码: 01 julia> if 0 02 println("hello") 03 end 代码01行中的if 0将报错,错误信息如下: 01 TypeError:上下文中使用非布尔值.../loading.jl:515 意思就是代码01行中的0不是布尔值,而是Int64类型的值。 其实我觉得把0放在一个大的数集中,很正确!
领取专属 10元无门槛券
手把手带您无忧上云