首页 > 技术文章 > PythonNote

what-lee 2018-04-01 17:17 原文

form: https://www.liaoxuefeng.com/

2017-12-22 16:08
基于Python 3版本
python 链接 : https://www.python.org/ftp/python/3.6.3/python-3.6.3-amd64.exe
勾上Add Python 3.6 to PATH,然后点“Install Now”即可完成安装。

print()会依次打印每个字符串,遇到逗号“,”会输出一个空格
4空格缩进

如果字符串内部既包含'又包含"可以用转义字符\来标识 :'I\'m \"OK\"!'

布尔值可以用and、or和not运算

C#null = python None

python是变量本身类型不固定语言:动态语言

/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:

还有一种除法是//,称为地板除,两个整数的除法仍然是整数

ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符

'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'

# list 和List一样
list是一种有序的集合,可以随时添加和删除其中的元素。
listTemp = [1,2,'a','b']
索引访问
获取长度 len(listtemp)
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素listtemp[-1],以此类推,可以获取倒数第2个、倒数第3个

list是一个可变的有序表,所以,可以往list中追加元素到末尾:
listtemp.append('c')

插入: listtemp.insert(1,'d')
删除末尾: listtemp.pop() , 添加参数可以删除指定索引元素

嵌套list/多维list:s = ['python', 'java', ['asp', 'php'], 'scheme'] :len(s) 4
[][]调用

 

# tuple 类似静态初始化数组, 但是元素不可变

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改
listTemp = (1,2,'a','b')

这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用listTemp[0],listTemp[-1],但不能赋值成另外的元素。

不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来

如果要定义一个空的tuple,可以写成():

>>> t = ()
>>> t
()

但是,要定义一个只有1个元素的tuple,如果你这么定义:

>>> t = (1)
>>> t
1
定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

>>> t = (1,)
>>> t
(1,)
Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。

如果tuple中包含list 那么list是可变的


# 判断
if elif else 后边都要跟":" 注意缩进

# 循环
Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来

names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)

range(x): 可以生成0-(x-1)的数

while 方式 灵活一些
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)

break,continue

for while后边都要跟":" 注意缩进

# dict 字典 键值对
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:

>>> d['Adam'] = 67
>>> d['Adam']
67

要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:

>>> 'Thomas' in d
False

二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1

注意:返回None的时候Python的交互环境不显示结果。

要删除一个key,用pop(key)方法,对应的value也会从dict中删除:

>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

和list比较,dict有以下几个特点:

查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
而list相反:

查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。

# set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。

重复元素在set中自动被过滤:

>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
通过remove(key)方法可以删除元素:

>>> s.remove(4)
>>> s
{1, 2, 3}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。

python官方文档
http://docs.python.org/3/library/functions.html#abs

# 函数
可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:

>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
1

使用def 定义函数 后边要加":"


如果想定义一个什么事也不做的空函数,可以用pass语句:

如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名):

pass
pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

函数返回多个值

```
import math

def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
```


>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0
但其实这只是一种假象,Python函数返回的仍然是单一值:

>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)
其实返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

 

推荐阅读