Python 学习笔记1 - 了解与基础

  • 终端进入 python 交互式环境
    python
    >>>
    
  • 运行 py 文件
    >>> python hello.py
    
  • 加载一个模块
    import sys
    
    Python会在指定的路径下搜索对应的.py文件,默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中。如果找不到,就会报错。
    import sys
    
    sys.path
    
    添加自己的搜索目录:
    • 一是直接修改sys.path:sys.path.append('xxx'),这种方法运行结束后失效
    • 设置环境变量 PYTHONPATH
  • 注释 #
  • 使用 4 个空格缩进
  • 每一行都是一个语句,当语句以冒号 : 结尾时,缩进的语句视为代码块
  • py 文件头通常加上
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
    第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,防止乱码
  • 输出
    print('xxx')
    print('a','b','c')
    print(100)
    
  • 输入
    input()
    a = input()
    a = input('enter something')
    
  • 基本数据类型
    • 整数:100 0xff00 int('10')
    • 浮点数:1.23 1.23e9 1.23e-3
    • 字符串
    # 可用 '' 表示
    'abc'
    # 可用 "" 表示
    "def"
    # 字符串包含 ' 可用 "" ,同理 '' 
    "I'm OK"
    # 使用转义字符 \ (% 需用 %% 转义)
    'I\'m OK'
    # \ 还可用作续行符
    "你\
    好"
    # r''表示''内部的字符串默认不转义
    r"C:\test"
    # 多行
    '''可
    多
    行'''
    
    • 布尔值:True False
    • 逻辑运算符:and( & ) or( | ) not
    • 空值:None
    • NaN
    • 常量:PI
  • 类型判断函数: isinstance(,) eg:isinstance(123,int)
  • 运算符
    • + - * /( 精确除 ) %
    • //( 地板除、取整除 ) **( 乘方 )

字符串和编码

python 以 unicode 编码,在内存中以 unicode 表示。Unicode编码通常是2个字节(ASCII编码是1个字节)

字母A用ASCII编码是十进制的65,二进制的01000001;用Unicode编码的二进制是00000000 01000001(只需要在前面补0)

“可变长编码” —— UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节

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

ord('A') ==> 65 
ord('中') ==> 20013
chr(65) ==> A 
chr(20013) ==> 中

以十六进制的字符整数编码书写str:

'\u4e2d\u6587' ==> 中文
# 即等价于
'中文'

用带b前缀的单引号或双引号表示一个 bytes 类型:

# x 是 bytes 类型
x = b'ABC'
# y 是 str 类型
y = 'ABC'

str 与 bytes 类型之间的转换:

# str 2 bytes
'ABC'.encode('ascii') ==> b'ABC'
# 在bytes中,无法显示为ASCII字符的字节,用\x##显示
'中文'.encode('utf-8') ==> b'\xe4\xb8\xad\xe6\x96\x87'


# bytes 2 str
b'ABC'.decode('ascii') ==> 'ABC'
b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') ==> '中文'

计算字符串长度:

len('ABC')

计算字节数:

len(b'ABC')
len('中文'.encode('utf-8'))

替换生成新的字符串:

a = 'abc' 
# 因为 str 是不可变对象,所以替换后赋予 b 
b = a.replace('a', 'A') b ==> 'Abc

格式化字符串:

'Hello, %s' % 'world' ==> 'Hello, world'
'Hi, %s, you have $%d.' % ('Michael', 1000000) ==> 'Hi, Michael, you have $1000000.'

% 运算符就是用来格式化字符串

常见的占位符有:
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数

# %2d 保留两位数字,%02d 保留两位数字,不够补 0
'%2d-%02d' % (3, 1)
# %.2f 小数点后保留两位
'%.2f' % 3.1415926

数据类型的转换

# str 2 int   
a = int('123')

# int 2 str
b = str(100)

# str 2 float
a = float('123.1')

# float 2 str
b = str(1.23)

# int 2 bool
a = bool(1)

# str 2 bool
b = bool('') ==> False

序列

range(5) 生成一个 0-4 的整数序列

列表 list

  • str 也可看作是一种 list

定义:

classmates = ['Michael', 'Bob', 'Tracy']
# list里面的元素的数据类型可以不同
L = ['Apple', 123, True]

a = list(range(5))

获取元素个数:

len(classmates)

访问,通过索引:

classmates[0]
# 注意越界问题
classmates[len(classmates) - 1]
# 可反向访问,也要注意越界问题
classmates[-1]

添加元素:

# 追加元素到末尾
classmates.append('Adam')
# 添加元素到指定位置
classmates.insert(1, 'Jack')

删除元素:

# 删除末尾元素
classmates.pop()
# 删除指定位置元素
classmates.pop(1)

修改元素:

classmates[1] = 'Sarah'

切片 slice —— 取一个list或tuple的部分元素

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
# 取前3个元素
L[0:3]
# 如果第一个索引是0,还可以省略
L[:3]
# 支持倒数切片
# 倒数第一个元素的索引是-1
# 同样是包左不包右
# 倒数切片获取的 list 依然是正序,因为默认的隔间取数为 1
L[-2:] ==> ['Bob', 'Jack']
L[-2:-1] ==> ['Bob']

# 获取反向切片,可以:
L[-1:-6:-1]

可按间隔取数

L = list(range(100))
# 前10个数,每两个取一个
L[:10:2]

只写[:]就可以原样复制一个list

L[:]

列表生成式 List Comprehensions —— 用来创建list的生成式

[x * x for x in range(1, 11)] ==> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

for循环后面还可以加上if判断

[x * x for x in range(1, 11) if x % 2 == 0] ==> [4, 16, 36, 64, 100]

使用两层循环,可以生成全排列

[m + n for m in 'ABC' for n in 'XYZ'] ==> ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

使用两个变量来生成list

d = {'x': 'A', 'y': 'B', 'z': 'C' }
[k + '=' + v for k, v in d.items()] ==> ['y=B', 'x=A', 'z=C']

元组 tuple

tuple 和 list 非常类似,但 tuple 一旦初始化就不能修改

定义:

classmates = ('Michael', 'Bob', 'Tracy')
# 定义一个只有1个元素的tuple
t = (1,)

访问,通过索引:

classmates[0]

字典 dict

定义:

d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}

访问:

# 如果没有对应的 key,会报错
d['Michael']
# 通过in判断key是否存在
'Thomas' in d

# 通过 get 方法获取,没有返回 None
d.get('Thomas')
# 指定当没有返回的 value
d.get('Thomas', -1)

添加键值对:

# d 里没有 key 为 'Adam' 的键值对,如果有,则是修改
d['Adam'] = 67

删除键值对:

d.pop('Bob')

集合 set

定义:

# 提供一个list作为输入集合,重复元素自动被过滤
s = set([1, 2, 3])

添加:

s.add(4)

删除:

s.remove(4)

集合的概念 —— 集合的交集和并集:

s1 & s2

s1 | s2

条件判断

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

循环与迭代

for...in循环:

  • for...in循环的参数是外部可见的
for i in range(n):
    ...


# list 的遍历循环(迭代)
names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)
# 使用Python内置的 enumerate 函数实现对list实现类似Java那样的下标循环
for i, name in enumerate(names):
    print(i, name)
    

# dict 的遍历循环(迭代)
d = {'a': 1, 'b': 2, 'c': 3}
# 默认情况下,dict迭代的是key
for key in d:
    print(key)
# 迭代 value
for value in d.values():
    print(value)
# 迭代 key-value
for k, v in d.items():
    print(k, " :", v)

while 循环:

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

循环相关语句:

  • break 语句
  • continue 语句

可迭代对象 Iterable 与不可迭代对象

  • 只要是可迭代对象,无论有无下标,都可以迭代
  • 判断一个对象是不是可迭代对象
    from collections import Iterable
    
    isinstance('abc', Iterable) ==> True
    isinstance([1,2,3], Iterable) ==> True
    isinstance(123, Iterable) ==> False
    
  • 可迭代对象有:list、tuple、dict、set、str、generator(包括生成器和带yield的generator function)

函数

高阶函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,548评论 1 118
  • 最近在慕课网学习廖雪峰老师的Python进阶课程,做笔记总结一下重点。 基本变量及其类型 变量 在Python中,...
    victorsungo阅读 1,656评论 0 5
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,680评论 0 5
  • 一、python 变量和数据类型 1.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序...
    绩重KF阅读 1,648评论 0 1
  • python学习笔记 声明:学习笔记主要是根据廖雪峰官方网站python学习学习的,另外根据自己平时的积累进行修正...
    renyangfar阅读 3,020评论 0 10