<?xml version=”1.0” encoding=”UTF-8”?> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

Python 学习笔记 (1) --Python 基础
  1. 输出:print
    1. python2: print 'Hello Python'
    2. python3: print('Hello Python')
    3. python(‘10+20=‘,10+20)
  2. 输入:
    1. python2:raw_input()
    2. python3: input()
  3. python 的语法比较简单,采用缩进的方式:
a = 100
if a >= 0:
     print(a)
else:
     print(-a)

& diff &
a = 100
if a >=0:
print(a)
else:
print(-a)
  1. # 开头为注释;: 结尾,缩进的语句视为代码块;Python 大小写是敏感的,约定俗成:4 个空格的缩进,可以吧 tab 设置为 4 个空格。
  2. Python 的数据类型
    1. 整数:python 可以处理任意大小的整数
    2. 浮点数:也就是小数,之所以称之为浮点数,因为按照科学计数法表示时,一个浮点数的小数点位置是可变的
    3. 字符串:字符串是以’’和””包括起来的任意文本,例如’abc’,”xyz”;如果字符内部同时包含’和”,可以使用\转义字符来标识。
      1. 如果字符串内部有很多换行,用\n不好阅读,python 支持使用’’’…’’' 的格式表示多行‘
      2. r’…'  python 可以使用 r’’表示’'以内的字符不转义;多行:r’’’…’''
    4. 布尔值:布尔值和布尔代数表示的完全一致,一个布尔值只有 True 和 False,python 支持直接使用 True 和 False 表示布尔值,注意大小写,另外最好不要生命变量时使用 True 等,布尔值,经常用于在条件判断之中。
      1. and : 与运算,所有运算结果都是 True,and 的结果才是 True
      2. or:或运算,只有 1 个运算结果为 True,or 的结果就是 True
      3. not:他是一个单目运算符,取相反的值
    5. 空值:python 里的一个特殊值,用 None 表示,注意 None 不能理解为 0,因为 0 是有意义的,而 None 是一个特殊的空值
  3. python 的变量
    1. 命名规则:必须是大小写英文,数字和_的组合,且不能用数字开头;
    2. 赋值符号:’=’;等于的符号是’==’
    3. 动态语言:变量本身类型不固定的语言称之为动态语言,反之是静态语言,静态语言在定义变量时必须制定变量的数据类型,如果赋值的时候类型不匹配,就会报错;
    4. 变量在计算机内存中的表示:a=1,指的是 python 在内存中创建了整数 1,然后在内存创建了变量 a,并把它指向了整数 1
  4. python 的常量
    1. 定义:常量就是不能改变的变量,在 python 中,通常使用全部大写的变量名表示常量
    2. 整数的除法是精确的,因为除法计算结果是浮点数,例如 9/3 结果为 3.0 ; 另外一种除法是’//‘地板除,两个整数的除法任然是整数;余数运算’%’
  5. 字符编码:字符串是一种数据类型,但是字符串还涉及到一个编码问题,Python3 的字符串是支持多语言的
    1. ord(‘') 函数 获取字符的整数表示;
    2. chr(‘') 函数 把编码转换成对应的字符;
    3. python 的字符串类型是 str,在内存中以 Unicode 表示,一个字符对应若干字节,但是如果要在网络传输或者保存到磁盘,就要把 str 转化为单位的 bytes;
      1. python 对于 bytes 的数据类型用带 b 前缀的单引号或双引号表示:
      2. 另外,Unicode 表示的 str 可用 encode() 函数,指定编码为 bytes。 ‘ABC’ .encode(‘utf-8')
      3. decode() 可以吧 bytes 转变为 str。b'ABC' .decode('ascii')
      4. 要计算 str 包含了多少个字符使用 len() 函数:len(‘hello’) ,结果为 5
    4. #!/usr/bin/env python3
      # -*- coding: utf-8 -*-
  6. 格式化:如何处理格式化输出字符串,在 python 中使用的格式化方式和 C 语言是一致的,用’%’实现:
    1. %d 表示整数
    2. %f 表示浮点数
    3. %s 表示字符串,如果不确定用什么,用%s,它会把任何数据类型转换为字符串
    4. %x 表示十六进制整数
    5. %% 表示一个普通的%
  7. 数据类型 list 和 tuple
    1. list 是 python 内置的一种数据类型:列表,list 是一个有序的集合,可以随时添加和删除其中元素。
      1. classmates = [‘Michael’,’Bob’,’Tracy’], 可以用len() 函数获取这个 list 的元素的个数
      2. 可以用索引来访问 list 中的每一个位置的元素,记住索引的第一个位置是 0:
      3. 当索引超出范围的时候,python 会报出 IndexError 错误,记得最后一个索引是 len(classmates) -1
      4. 如果直接取出最后一个索引可用 classmates[-1],以此类推
    2. list 是一个可变的有序列表,所以可以去追加,插入指定位置,删除,替换等操作,支持不同数据类型,支持嵌套 list
      1. 追加:classmates.append(‘Adam')
      2. 插入指定位置: classmates.insert(2,’Jack')
      3. 删除 list 末尾的元素:classmates.pop()
      4. 删除指定位置的元素:classmates.pop(1)
      5. 替换元素:classmates[1]=‘Sarch’ , 直接给相应位置的元素重新赋值即可
      6. list 的元素支持不同的数据类型,L = [‘abc’,23,23.4]
      7. list 的元素支持嵌套另外一个 list:s = [‘abc',123,[‘XYZ’,2.34]],注意这个时候len(s) 的元素是 3 个
      8. list 也可以没有元素,就是一个空的 list,它的长度为 0
    3. tuple:元组,也是一种有序列表,但是 tuple 一旦初始化就不能修改,他没有 append() 也没有 insert(),这样的方法,其他获取元素的方式和 list 一样,也不能赋值成为另外的元素:
      1. classmates = (‘Michael’,’Bob’,’Tracy’) 注意 list 用的是’[]’,而tuple用的是’()’
      2. tuple 有个问题,当你定义 1 个元素的时候,tuple 的 () 和数学公式中的小括号混淆,因此 python 规定,这种情况下面,当定义只有 1 个 tuple 时必须增加一个逗号’,’来消除歧义。
      3. tuple 的元素也可以为 list 或者 tuple,tuple 的元素不会改变,但是 list 是一个可以改变的有序数列,所以当 tuple 中包含 list 时,这个 tuple 是’可变的'
    4. 取出特定元素:L[[‘Apple’,’Google’,’Microsoft’],[‘Java’,’Python’,’C’]] ; L[1][1] = ‘Python'
  8. 条件判断
    1. if:根据 python 的缩进规则,如果 if 语句的判断是 True,就会执行下面的语句,否则什么都不做
    2. else:也可以个 if 添加 else,意思就是,如果 if 的判断是 false,不要执行 if 的内容,执行 else 的内容
    3. elif:如果要嵌套多级判断条件的话,使用 elif,elif 是 else if 的缩写
    4. if 语句执行有个特点,它是自上而下的判断,如果某个判断的结果是 True,那么执行该判断对应的语句,就会忽略掉剩下的所有 elif 和 else,if 判断条件还可以简写:if x: 只要 x 是非零数值、非空字符串、非空 list 等,就判断为 True,
  9. iput(): 需要注意的地方,默认input的返回类型是str,由于str不能直接整数比较,所以在碰到明明输入200,但是不能和201对比时,记住先要把str转化为整数,python提供了int()函数, 转化数据类型为int类型,但是如果输入’abc’则会得到1个ValueError的错误
  10. 循环
    1. for…in:依次把 list 或者 tuple 的每个元素迭代出来,for x in … :循环就是把每个元素带入变量 x,然后执行缩进的语句:
    2. range() 函数:用来生成一个整数序列,再通过 list() 函数转换为 list,例如 range(5) 生成:0,1,2,3,4
      1. list(range(5)) = [0,1,2,3,4]
      2. 计算 1+...+100 的结果:for x in range(101): sum = sum +x
    3. while 循环:只要条件满足,就不断循环,条件不足时退出循环:
      1. 计算 100 以内所有奇数之和:sum = 0,n = 99, while n > 0: sum =sum +n; n = n-2
    4. break: 在循环中,break 语句可以提前退出循环,当程序执行满足 break 条件的时候,就会退出循环
    5. continue: 在循环过程中,也可以通过 continue 语句,跳过当前的这次循环。
    6. 注意:循环是让计算机做重复任务的有效方法,break 语句可以在循环过程总直接退出循环,continue 语句可以提前结束本轮循环,并直接进入下一轮循环,这两个语句通常必须配合 if 语句使用,但是尽量不要滥用这两个语句,因为当 break 和 continue 使用过多会导致代码执行逻辑分支过多,容易出错。
  11. dict 和 set
    1. dict:python 内置了字典:dict 的支持,全称:dictionary,在其他语言中也称之为 map,使用键值存储,具有极快的查找速度。
    2. 对比 list 处理方式:会过滤整个 list 的元素,这导致 list 越长,耗时越长;dict 实现时,只需要创建 key-values 对应表,直接根据名字查找,无论这个表有多大,查找速度都不会变慢,但是内存消耗会大,典型用性能 (内存空间) 换时间。
    3. dict的初始化: d {‘Michael’:95,’Bob’:75,’Tracy’:85}  # 注意dict使用的是大括号’{}‘
    4. dict 的数据插入:d [‘Adam’] = 67 
    5. 由于 dict 是根据 key 检索,所以 key 是固定的,一个 key 只能对应 1 个 value,所以当对 1 个 key 多次放入 value 时,后面的值会把前面的值冲掉: (类似变量)
    6. 但是如果查询的 key 不存在,dict 会报错,KeyError,可以用 in 判断 key 是否存在:‘key’in d  : True/False
    7. 通过 dict 的 get 方法,如果 key 不存在,可以返回 None,或者自己指定的值,d.get(‘Key’) , d.get(‘key’,-1)
    8. d.pop('key’): 删除 1 个 key,注意当 key 被删除是,相应的 value 也会被删除。
    9. 另外注意:dict 内部存放的顺序和 key 放入的顺序是没有关系的:
    10. dict 应在需要高速查找的地方,正确使用 dict 非常重要,要牢记 1 点,dict 的 key 必须是不可变的对象,因为 dict 是根据 key 来计算 value 的位置,如果每次计算相同的 key 得到的结果不一样,那么 dict 内部就完全混乱了,这个通过 key 计算位置的算法称之为 Hash 算法。
    11. 要保证 hash 的准确性,作为 key 的对象就不能改变,在 python 中,字符串·整数等都是不可变的,但是 list 是可以变的所以不能作为 key
    12. set:set 和 dict 类似,也是一组 key 的集合,但是不存储 value,由于 key 不能重复,所以,在 set 中,没有重复的 key 值。
    13. 要创建一个set,需要提供一个list作为输入集合。 s = set([1,2,3])   : s = {1,2,3}
    14. 注意 set 也不是有序的,而且重复在 set 存在的元素会被自动过滤:s = set([1,2,3,1,2,3,1,2,3])  s = {1,2,3}
    15. 通过 s.add(key) 可以增加元素到 set 中,可以重复添加,但是不会有效果
    16. 通过 s.remove(key) 可以删除元素
    17. set 可以看成数学意义上的无序和无重复元素的集合,因此两个 set 可以做数学意义上的交集、并集能操作:
      1. s1 = set([1,2,3]), s2 = set([2,3,4]) ,交集:s1 & s2 = {2,3} ; s1 | s2 = {1,2,3,4}
    18. set 和 dict 的区别仅在于有没有存储对应的 value,但是 set 和 dict 的原理是一样的,所以,同样不可以放置可变对象,因为无法判断两个对象是否相等,也就无法保证 set 内部的不会重复元素
    19. 不可变对象:str 是不变对象,list 是可变对象;对于可变对象,例如 list,对 list 进行操作,list 的内部会发生变化
    20. a = ‘abc’ , a.replace(‘a’,’A’) # 这个操作是把所有小写的 a 替换成大写的 A,但是注意 a 的值并没有发生改变,要牢记 a 是变量,’abc'才是字符对象。