再次回味Python2——笔记

一、基本知识

1、一个值可以同时赋给几个变量:

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0

2、创建复数

>>> a=1+6j
>>> x=complex(1,3) # x=1+3j>>>x.real1>>>x.imag 3

3、字符串

>>> ‘spam eggs‘
‘spam eggs‘
>>> ‘doesn\‘t‘
"doesn‘t"
>>> "doesn‘t"
"doesn‘t"
>>> ‘"Yes," he said.‘
‘"Yes," he said.‘
>>> "\"Yes,\" he said."
‘"Yes," he said.‘
>>> ‘"Isn\‘t," she said.‘
‘"Isn\‘t," she said.‘

字符串可以标识在一对三引号中: """ 或 ‘‘‘ 。三引号中,不需要行属转义,它们已经包含在字符串中。

hello = r"This is a."
print(hello)

字符串也可以被截取(检索)

Unicode

>>> u‘Hello World !‘
u‘Hello World !‘
>>> str(u"abc")
‘abc‘

4、列表

>>> a = [‘spam‘, ‘eggs‘, 100, 1234]
>>> a
[‘spam‘, ‘eggs‘, 100, 1234]

就像字符串索引,列表从 0 开始检索。列表可以被切片和连接

允许嵌套列表(创建一个包含其它列表的列表)

>>> q = [2, 3]
>>> p = [1, q, 4]
>>> len(p)
3
>>> p[1]
[2, 3]
>>> p[1][0]
2

5、for语句

Python 的 for 语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代。

>>> # Measure some strings:
... a = [‘cat‘, ‘window‘, ‘defenestrate‘]
>>> for x in a:
...     print x, len(x)
...
cat 3
window 6
defenestrate 12
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(5, 10)
[5, 6, 7, 8, 9]
>>> range(0, 10, 3)
[0, 3, 6, 9]
>>> range(-10, -100, -30)
[-10, -40, -70]

6、定义函数

全局变量不能在函数中直接赋值(除非用 global 语句命名)

>>> def fib(n):
...     """Print a Fibonacci series up to n."""
...     a, b = 0, 1
...     while a < n:
...         print a,
...         a, b = b, a+b

函数体的第一行语句可以是可选的字符串文本,这个字符串是函数的文档字符串,或者称为 docstring 。

  6.1、Lambda 形式

Lambda 形式可以用于任何需要的函数对象。

类似于嵌套函数定义,lambda 形式可以从外部作用域引用变量

>>> def make_incrementor(n):
...     return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43

  6.2、文档字符串

第一行应该是关于对象用途的简介

如果文档字符串有多行,第二行应该空出来,与接下来的详细描述明确分隔。

Python 的解释器不会从多行的文档字符串中去除缩进,所以必要的时候应当自己清除缩进。

文档第一行通常空出,如果写了,__doc__格式不是很好

def test():
    """
    aaaaaaaaaaaaaaaaaaaa
    this is a test document!
    bbbbbbbbbbbbbbbbbbbb
    """
    pass

print test.__doc__输出如下:
    aaaaaaaaaaaaaaaaaaaa
    this is a test document!
    bbbbbbbbbbbbbbbbbbbb
 

7、 插曲:编码风格建议

  • 使用 4 空格缩进,而非 TAB。

    在小缩进(可以嵌套更深)和大缩进(更易读)之间,4空格是一个很好的折中。TAB 引发了一些混乱,最好弃用。

  • 折行以确保其不会超过 79 个字符。

    这有助于小显示器用户阅读,也可以让大显示器能并排显示几个代码文件。

  • 使用空行分隔函数和类,以及函数中的大块代码。
  • 可能的话,注释独占一行
  • 使用文档字符串
  • 把空格放到操作符两边,以及逗号后面,但是括号里侧不加空格: a = f(1, 2) + g(3, 4) 。
  • 统一函数和类命名。

    推荐类名用 驼峰命名, 函数和方法名用 小写_和_下划线。总是用 self 作为方法的第一个参数(关于类和方法的知识详见 初识类 )。

  • 不要使用花哨的编码,如果你的代码的目的是要在国际化 环境。 Python 的默认情况下,UTF-8,甚至普通的 ASCII 总是工作的最好。
  • 同样,也不要使用非 ASCII 字符的标识符,除非是不同语种的会阅读或者维护代码。

二、数据结构

1. 关于列表更多的内容

Python 的列表数据类型包含更多的方法。 这里是所有的列表对象方法:

  • list.append(x)  把一个元素添加到链表的结尾
  • list.extend(L  将一个给定列表中的所有元素都添加到另一个列表中
  • list.insert(ix)  在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引
  • list.remove(x)  删除链表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
  • list.pop([i])  从链表的指定位置删除元素,并将其返回。如果没有指定索引, a.pop() 返回最后一个元素。元素随即从链表中被删除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
  • list.index(x)  返回链表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
  • list.count(x)  返回 x 在链表中出现的次数。
  • list.sort()  对链表中的元素就地进行排序
  • list.reverse()  就地倒排链表中的元素
时间: 2024-10-11 04:16:35

再次回味Python2——笔记的相关文章

回味Python2.7——笔记4

一.Python 标准库概览 1.操作系统接口 os 模块提供了很多与操作系统交互的函数: >>> import os >>> os.getcwd() # Return the current working directory 'C:\\Python27' >>> os.chdir('/server/accesslogs') # Change current working directory >>> os.system('mkdi

回味Python2.7——笔记3

一.错误和异常 1.异常处理 >>> while True: ... try: ... x = int(raw_input("Please enter a number: ")) ... break ... except ValueError: ... print "Oops! That was no valid number. Try again..." ... try 语句按如下方式工作: 首先,执行 try 子句 (在 try 和 excep

回味Python2.7——笔记2

一.模块 模块是包括 Python 定义和声明的文件.文件名就是模块名加上 .py 后缀.模块的模块名(做为一个字符串)可以由全局变量 __name__ 得到. 1. 模块可以导入其他的模块. 一个(好的)习惯是将所有的 import 语句放在模块的开始(或者是脚本),这并非强制. 被导入的模块名会放入当前模块的全局符号表中. from fibo import * :这样可以导入所有除了以下划线( _ )开头的命名. 需要注意的是在实践中往往不鼓励从一个模块或包中使用 * 导入所有,因为这样会让

Python2 和 Python3 中默认编码的差异

最近在使用 Python3.4 做一些脚本实现,发现对于编码的处理上和 Python2.6 有很大的不同,就此机会把相关知识做个梳理,方便需要的时候查阅. 先说下概念和差异: 脚本字符编码:就是解释器解释脚本文件时使用的编码格式,可以通过 # -\*- coding: utf-8 -\*- 显式指定解释器字符编码:解释器内部逻辑过程中对 str 类型进行处理时使用的编码格式Python2 中默认把脚步文件使用 ASCII 来处理(历史原因请 Google)Python2 中字符串除了 str 还

自定义view实现水波纹效果

今天看到一篇自定view 实现水波纹效果 觉得真心不错 学习之后再次写下笔记和心得.但是感觉原作者写得有些晦涩难懂,也许是本人愚笨 所以重写此作者教程.原作者博文大家可以去看下,感觉他在自定义view方面非常厉害,本文是基于此作者原文重新改写,拥有大量像相似部分 先看下效果吧: 1. 效果1: 2. 效果2 我先们来学习效果1: 效果1实现本质:用一张波形图和一个圆形图的图片,然后圆形图在波形图上方,然后使用安卓的图片遮罩模式desIn(不懂?那么先记住有这样一个遮罩模式).(只显示上部图像和下

AngularJS 之 Factory vs Service vs Provider【转】

英文原文:AngularJS: Factory vs Service vs Provider 当你初试 Angular 时,很自然地就会往 controller 和 scope 里堆满不必要的逻辑.一定要早点意识到,controller 这一层应该很薄:也就是说,应用里大部分的业务逻辑和持久化数据都应该放在 service 里.我每天都会在 Stack Overflow 上看到几个同类的问题,关于如何在 controller 里保存持久化数据.这就不是 controller 该干的事.出于内存性

springMvc filter 获取并打印参数

---恢复内容开始--- 今天领导安排给我一个活,在web.xml添加一个拦截器,日志打印出请求和响应的参数,搞了一下午,现在再次做一个笔记. 先不急着上代码,我们先要理清整个http请求的逻辑, 一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HTTP的响应给客户端,HTTP的响应内容同样有标准的格式.无论是什么客户端或者是什么服务端,大家只要按照HTTP的协议标准来

AngularJS之Factory vs Service vs Provider

原文  http://www.linuxeden.com/html/news/20140509/151538.html 当你初试 Angular 时,很自然地就会往 controller 和 scope 里堆满不必要的逻辑.一定要早点意识到,controller 这一层应该很薄:也就是说,应用里大部分的业务逻辑和持久化数据都应该放在 service 里.我每天都会在 Stack Overflow 上看到几个同类的问题,关于如何在 controller 里保存持久化数据.这就不是 controll

联想集团大裁员:“公司不是家” 和 “柳传志的回应”(

联想集团大裁员:"公司不是家" 和 "柳传志的回应"(转贴) 老文章了.在这个寒冷的冬天.再次回味回味................... "假设人类失去联想,世界将会如何?"--看了这篇文章后,大家联想一下,就会有各自 不同滋味在心头-- 联想集团大裁员:公司不是家 员工 今天,恐怕是联想历史上规模最大的一次大裁员.我们部门9个人,今天送走了三个.还 有三个要转岗.剩下三个.整个研究院走了30多人.转岗20多人.这是我经历的第二次所谓 战略性