在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样。在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可。但是,当用变量的时候,必须要给这个变量赋值;如果只写一个变量,而没有赋值,那么Python认为这个变量没有定义。如下:>>> a Traceback (most recent call last):File "", line 1, in NameError: name a is not defined下面我们具体讲一下Python中的变量,引用,拷贝和作用域问题。。一、可变...
类和对象 类和函数一样都是Python中的对象。当一个类定义完成之后,Python将创建一个“类对象”并将其赋值给一个同名变量。类是type类型的对象(是不是有点拗口?)。 类对象是可调用的(callable,实现了 __call__方法),并且调用它能够创建类的对象。你可以将类当做其他对象那么处理。例如,你能够给它们的属性赋值,你能够将它们赋值给一个变量,你可以在任何可调用对象能够用的地方使用它们,比如在一个map中。事实上当你在使用ma...
您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ? 我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念。 如何生成斐波那契數列 斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到。用计算机程序输出斐波那契數列的前 N 个数是一个非常简单的问题,许多初学者都可以轻易写出如下函数: 清单 1. 简单输出斐波那...
注:这里忽略了生成器,装饰器,交换变量等熟知技巧 1. 函数参数unpack 老生常谈的了:def foo(x, y):print x, yalist = [1, 2] adict = {x: 1, y: 2}foo(*alist) # 1, 2 foo(**adict) # 1, 2 2. 链式比较操作符>>> x = 3 >>> 1 < x < 5 True >>> 4 > x >=3 True 3. 注意函数的默认参数>>> def foo(x=[]): ... x.append(1) ... print x ... >>> foo() [1] >>> foo() [1, 1] 更安全的做法:>>> def foo(x=None): ... if x is Non...
和很多语言一样,Python中也分为简单赋值、浅拷贝、深拷贝这几种“拷贝”方式。 在学习过程中,一开始对浅拷贝理解很模糊。不过经过一系列的实验后,我发现对这三者的概念有了进一步的了解。 一、赋值 赋值算是这三种操作中最常见的了,我们通过一些例子来分析下赋值操作: str例代码如下: >>> a = hello >>> b = hello >>> c = a >>> [id(x) for x in a,b,c] [4404120000, 4404120000, 4404120000]由以上指令中,我们可以发现a, b...
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义class:代码如下: >>> class Staff(object): ... pass ...然后,尝试给实例绑定一个属性:代码如下: >>> s = Staff() >>> s.name = jack >>> print s.name jack >>>还可以尝试给实例绑定一个方法:代码如下: >>> def set_age(self,age): ... self.age = age ... >>> from types import ...
本文实例讲述了Python中的装饰器用法。分享给大家供大家参考。具体分析如下: 这里还是先由stackoverflow上面的一个问题引起吧,如果使用如下的代码:代码如下:@makebold @makeitalic def say():return "Hello" 打印出如下的输出: Hello 你会怎么做?最后给出的答案是:代码如下:def makebold(fn):def wrapped():return "" + fn() + ""return wrapped def makeitalic(fn):def wrapped():return "" + fn() + ""return wrapped @mak...
If an object's value can be modified, the object is said to be mutable. If the value cannot be modified,the object is said to be immutable. mutable 可变类型,例如 list,set,自定义类型(等价于C#中的引用类型); immutable 不可变类型,例如string,numbers等(等价于C#中的值类型); 一、引用和拷贝(references and copies) 当程序中使用=赋值操作符时,例如a=b, 对于不可变的对象,a作为b的一个拷贝被创建,a和...
zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。具体意思不好用文字来表述,直接看示例: 1.示例1:代码如下: x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] xyz = zip(x, y, z) print xyz运行的结果是: [(1, 4, 7), (2, 5, 8), (3, 6, 9)] 从这个结果可以看出zip函数的基本运作方式。 2.示例2:代码如下: x = [1, 2, 3] y = [4, 5, 6, 7] xy = zip(x, y) print xy运行的结果是:代码如下: [(1, 4), (2, 5), ...
Python 是面向对象的语言,所以程序抛出的异常也是类。 常见的异常类 1.NameError:尝试访问一个没有申明的变量 2.ZeroDivisionError:除数为 0 3.SyntaxError:语法错误 4.IndexError:索引超出序列范围 5.KeyError:请求一个不存在的字典关键字 6.IOError:输入输出错误(比如你要读的文件不存在) 7.AttributeError:尝试访问未知的对象属性 8.TypeError:传给函数的参数类型不正确,比如给 int 函数传入字符型 自定义异常类 尽...
Python是静态作用域语言,尽管它自身是一个动态语言。也就是说,在Python中变量的作用域是由它在源代码中的位置决定的,这与C有些相似,但是Python与C在作用域方面的差异还是非常明显的。 接下来会谈论Python的作用域规则,在这中间也会说明一下Python与C在作用域方面的不同。 在Python 2.0及之前的版本中,Python只支持3种作用域,即局部作用域,全局作用域,内置作用域;在Python 2.2中,Python正式引入了一种新的作用域 --- 嵌套...
问题是在Python中进行循环的时候产生的,熟悉Python的都知道,它没有类似其它语言中的for循环, 只能通过for in的方式进行循环遍历。最典型的应用就是通过range函数产生一个列表,然后用for in进行操作,如下:代码如下: #!/usr/bin/env python for i in range(10):print i代码的意义很好理解,range会产生一个列表,用for in最这个列表进行遍历,就有和类似for(i = 0;i<n;i++)同样的效果,range函数的详解可以看这里。问题又来了,r...
With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。 如果不用with语句,代码如下:代码如下: file = open("/tmp/foo.txt") data = file.read() file.close()这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是处...
1.背景 看到这里提到了pprint。 打算去试试. 2.pprint简介 找到在线官网解释: pprint — Data pretty printer 就是一个,方便大家打印一些,相对复杂的变量的好东西。 3.使用pprint 去写点代码试试。代码:代码如下: #------------------------------------------------------------------------------- # Name: 【记录】折腾Python中的pprint # Author: Crifan Li # # Created: 06/01/2013 # Copyright: (c)...
本文实例讲述了Python中的True,False条件判断用法。分享给大家供大家参考。具体分析如下: 对于有编程经验的程序员们都知道条件语句的写法: 以C++为例:代码如下:if (condition) { doSomething(); } 对于Python中的条件判断语句的写法则是下面的样子:代码如下:if (condition): doSomething() 那么对于条件语句中的condition什么时候为真什么时候为假呢? 在C++/Java等高级语言中,如果条件的值为0或者引用的对象为空指针,...