单纯记录一些python学习笔记。
Python data structure
- list
- dictionary
代码规范
输入输出
print()会依次打印每个字符串,遇到逗号“,”会输出一个空格
print(‘The quick brown fox’, ‘jumps over’, ‘the lazy dog’)
input()输入参数为str类型,如果需要整数型,需要转换
a_str = input() a_int = int(a)
代码格式
- 每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。
# print absolute value of an integer: a = 100
if a >= 0:
print(a)
else:
print(-a) - Python程序是大小写敏感的
- 每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。
转义
- 如果字符串内部既包含’又包含”怎么办?可以用转义字符\来标识
print(‘I'm ok.’)
- Python还允许用r’’表示’’内部的字符串默认不转义
>>> print(r'\\\t\\') \\\t\\
- 为了简化,Python允许用’’’…’’’的格式表示多行内容
print('''line1 line2 line3''') line1 line2 line3
- 如果字符串内部既包含’又包含”怎么办?可以用转义字符\来标识
布尔值
在Python中,可以直接用True、False表示布尔值
>>> 3 > 2 True >>> 3 > 5 False
布尔值可以用and、or和not运算
动态语言/静态语言,变量本身类型不固定的语言称之为动态语言
除法/ 和 //
- / 除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数
- //称为地板除,两个整数的除法仍然是整数
Python的整数没有大小限制
数组list tuple
- list
- 如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素
- tuple一旦初始化就不能修改
- 数组/字符串切片
- 后10个数:
>>> L[-10:] [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
- 取前3个元素
>>> L[0:3] ['Michael', 'Sarah', 'Tracy']
- 前10个数,每两个取一个:
>>> L[:10:2] [0, 2, 4, 6, 8]
- 字符串’xxx’也可以看成是一种list
>>> 'ABCDEFG'[:3] 'ABC' >>> 'ABCDEFG'[::2] 'ACEG'
- 后10个数:
- list
代码结构
IF判断
- if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else
age = 20 if age >= 6: print('teenager') elif age >= 18: print('adult') else: print('kid')
- if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else
For循环迭代
能否迭代判断,通过collections模块的Iterable类型判断:
>>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整数是否可迭代 False
简洁迭代方法:Comprehension推导式
可以简单漂亮的写出python风格的语法。这些方法很好用,代码会更加简洁漂亮。
第一种方法,使用for循环进行数组填充
number_list = []
for number in range(1, 6):
number_list.append(number)
print(number_list)第二种方法,使用list进行填充
print(list(range(1, 6)))
第三种方法,使用推导式
print([number for number in range(1,6)])
list推导式
listObj = [expression for item in iterable if condition]
print([number*2 - 3 for number in range(2,5)])
print([number for number in range(1,6) if number >% 2 == 1])dictionary推导式
dictionaryObj = { key_expression : value_expression for expression in iterable if condition}
word = ‘letters’
letter_counts = {letter: word.count(letter) for letter in set(word) if letter.lower() not in ‘aeiou’}
print(letter_counts)set推导式
set_Obj = {expression for expression in iterable if condition}
print({number for number in range(1,6) if number % 3 == 1})
generator 推导式
tuples没有推导式的用法,使用()包起來是generator推导式的用法,简单来说就是可以产生像是range()的Object,亦表示可以直接对齐迭代
number_thing = (number*3-2 for number in range(1, >6))
print((1,))
print(number_thing)
for number in number_thing:
print(number)#或者转为list使用
number_list = list(number_thing)
print(number_list)
print(‘因为只能使用一次,所以上面这边找不到东西了’)number_thing = (number*3-2 for number in range(1, >6))
number_list = list(number_thing)
print(number_list)
双参数迭代
>>> for x, y in [(1, 1), (2, 4), (3, 9)]: ... print(x, y) ... 1 1 2 4 3 9
python 常用库
- numpy
- matplotlib
- pandas
- xlwt
- xlrd
函数
类型转换函数:hex,int,str,bool,float
数据类型检查函数:isinstance()
def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x
返回多个值:
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
其实3中只是一种假象,Python函数返回的仍然是单一值。
>>> r = move(100, 100, 60, math.pi / 6) >>> print(r) (151.96152422706632, 70.0)
默认参数
当我们调用power(5)时,相当于调用power(5, 2)
def power(x, n=2):
好处
大多数学生注册时不需要提供年龄和城市,只提供必须的两个参数:
def enroll(name, gender, age=6, city='Beijing'): enroll('Bob', 'M', 7) enroll('Adam', 'M', city='Tianjin')
默认参数必须指向不变对象!
def add_end(L=[]): L.append('END') return L
>>> add_end() ['END'] >>> add_end() ['END', 'END']
避免错误:L指向None,不变对象
def add_end(L=None): if L is None: L = [] L.append('END') return L
可变参数
def calc(numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
>>> calc([1, 2, 3]) 14 >>> calc((1, 3, 5, 7)) 84
以Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:
def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
>>> calc(1, 2) 5 >>> calc() 0
>>> nums = [1, 2, 3] >>> calc(*nums) 14
关键字参数 && 命名关键字参数
高级特性
- 列表生成式
- 建立类似于x个x*x的list
>>>[x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
- 从XYZ与ABC两组数组组合全排列的
>>>[m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
- 建立类似于x个x*x的list
- 切片
- 切片取值
- L[m:n]:从列表的第m个元素开始取,一直取到第n个为止(不包括n)
- 切片赋值
- L[1:1] = L2:将L2列表插入到L第一个元素后面
>>>l1,l2 = [1,2,3] ,[4,5,6] >>>l1[1:1] = l2 >>>print(l1) [1,2,4,5,6,3]
- L[1:1] = L2:将L2列表插入到L第一个元素后面
- 切片取值
字符串操作
检查是否为字符串
>>> x = 'abc' >>> y = 123 >>> isinstance(x, str) True >>> isinstance(y, str) False
字符串大写变小写s.lower()
>>> L = ['Hello', 'World', 'IBM', 'Apple'] >>> [s.lower() for s in L] ['hello', 'world', 'ibm', 'apple']