python学习笔记全过程_Python学习笔记(一)

[TOC]

简介

Python是一种解释型、面向对象、动态数据类型的程序设计语言

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

解释型语言: 这意味着开发过程中没有编译这个环节。类似于PHP和Perl语言。

交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。

面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

——————————————————————————————————————————

Python 特点

1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。

2.易于阅读:Python代码定义的更清晰,伪代码本质。

3.易于维护:Python的成功在于它的源代码(开源免费)是相当容易维护的。

4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。

5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。

6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。

7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。

8.数据库:Python提供所有主要的商业数据库的接口。

9.GUI编程:即用户图形界面,Python支持GUI可以创建和移植到许多系统调用。

10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

———————————————————————————————————————————

一、环境搭建

使用Anaconda3的jupyter notebook进行开发,官网下载,安装配置环境,打开cmd或prompt,输入jupyter notebook。

注:IE浏览器进入WebUI需要token,token只有通过prompt命令行启动时才有——其他浏览器不需要

anaconda-navigator #导航视窗

jupyter notebook #开发本本

默认的工作空间是用户目录,现在进行修改

#生成jupyter的配置文件

jupyter notebook --generate-config

#打开生成的jupyter_notebook_config.py,配置工作空间位置

c.NotebookApp.notebook_dir = 'D:\JupyterProject'

确保中文不乱码

# coding=utf-8 指定编码支持中文,3.x无需

工程结构:

Python工程结构

模块(module)

一个Python文件就是一个模块

.py source code

.pyc compiled bytecode

.pyo optimized bytecode

包(package)

包含多个Python文件

__init__.py ——必须要由,不然就是一个普通目录而不是py包

部分导入

from xx import path

二、一般特性

!!!编程规范:PEP8

变量:

_或字母开头,_ 、字母和数字组成

弱类型,类型不是必须指定、类型不固定

大小写敏感

不能使用关键字

import keyword

keyword.kwlist #查看关键字列表

注释:

单行注释:#号

多行注释:三个单或双引号 ,字符串赋值。也可做为注释

内置函数:

type() :返回对象类型

dir() :函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表

input()/print() : 输入/打印 输出

id() :返回对象的地址 ,一般用来判断两个变量是否引用了同一个值

———————————————————————————————————————————

三、数据类型

1、数值类型

a)数值类型:int 、float、complex复数

int型式没有大数限制的

可以用下划线来标记位数,但是在小数点前后不能使用_

b)操作符

操作符说明操作符说明

x + y

加法

int(x)

转换成整数

x - y

减法

float(x)

转换成浮点数

x * y

乘法

complex(re, im)

创建一个复数

x / y

除法

c.conjugate()

返回复数的共轭复数

x // y

除后取整

divmod(x, y)

返回一个包含商和余数的元组

x % y

除后取余

pow(x, y)

返回x的y次方

-x

负数

x y**

返回x的y次方

abs(x)

取绝对值

round(x[, n])

方法返回浮点数x的四舍五入值

序列Seq

2、列表 list[]

a)特点

有序,可使用位置索引

表长度和元素都是可变的

可储存不同类型的数据

b)使用

创建:['one', 2, [3, 4], (5, 6)]

获取:两套下标,从0起始,从左往右下标为正,从右往左下标为负

判断:in 和 not in

——————————————————————————————————————————

3、元组

a)特点

有序

长度和元素都不可变,安全级别较高的场景应用

(元素的引用地址不能变,但地址内的值可变)

可以存储不同类型

b)使用

创建 : (1,”box",3.62) 、1,”box",3.62、tuple([1,”box",3.62])

获取:两套下标,x[0], x[2], x[-1], x[-3]

判断:in 和 not in

———————————————————————————————————————————

4、列表&元组的操作

a)切片

通过切片获得子集

[start​ : end : ​step]

start:起始索引,从0开始,-1表示结束,缺省则为0

end:结束索引,不被包括,缺省则为长度,

step:步长,end-start,步长为正时,从左向右取值。步长为负时,反向取值。缺省为1

正向取偶数下标子集:x[0::2]、x[::2]

反向取间隔下标子集:x[-1:0:-2]

b)遍历

#使用缩进代表子代码块

for x in list:

print(x)

c)混合

将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象

//zip 拉链

matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11]]

//最短原则

list(zip(*matrix)) # result: [(1, 5, 9), (2, 6, 10), (3, 7, 11)]

//元组补空

t = (1,2,3,4)

list(zip(t))

———————————————————————————————————————————

5、range类型

a)特性

一段不可变的数字序列

经常被用作for里面来指定循环次数

b)使用

创建:range(start, stop, step)

start 起始值,默认为0

stop 终止值,不包括在内

step 步长,默认为1,可为负,从右往左

切片: x[1:-1:1],中括号[]代替小括号,语法规则同创建。

遍历:for v in range(0,10,1):print(v)

———————————————————————————————————————————

6、列表、元组、range转换

列表元组可以互转:tuple(lst) | list(tup)

range到列表元组:list(r) | tuple(r)

———————————————————————————————————————————

7、pack & unpack

a)pack ——打包

变量转序列

t=1,2,3

#t=(1,2,3)

s='x','y','z'

#s=('x','y','z')

b)unpack ——解包

序列转变量

a,b,c=t

#a=1,b=2,c=3

使用*号代表出现0次或多次

a,*b=t

#a=1,b=[2,3]

#超长时

*a,c,d,e=t

#t中只有三个元素,因此a=[]

swap交换: a,b=b,a

8、常见序列操作

数据:s = [1,2,3] t = [4,5,6] n = 2

操作符说明

s+t

拼接:[1,2,3,4,5,6]

s * n or n * s

乘法:[1,2,3,1,2,3] ,重复序列

len(s)

计算序列的长度3

min(s)

获得序列中的最小值:1

max(s)

获得序列中的最大值:1

s.index(x[, i[, j]])

获得第1个x元素的索引 (索引值在i和j之间),指定范围内搜索元素值的下标

s.count(x)

序列x元素出现的次数

可变序列支持的操作(List) ——元组和range都不支持

操作符说明

s[i] = x

更新指定索引的值

s[i:j] = t

使用序列t替换s中的i到j的值

del s[i:j]

等同于s[i:j] = []

s[i:j:k] = t

使用序列t中的值替换s[i:j:k]的值

del s[i:j:k]

删除s[i:j:k]的值

s.append(x)

将值x添加到序列的末尾

s.clear()

清空序列,相当于del s[:]

s.copy()

创建一个s的浅拷贝

s.extend(t)

使用序列t扩展序列s

s.insert(i, x)

在序列s的i索引处插入值x

s.pop(i)

返回序列s中索引为i的值,并将该值从序列中移除

s.remove(x)

将序列中值为x的元素移除

s.reverse()

将序列s倒序排列

9、集合 Set

a)特性

数据唯一不重复

无序,没有索引下标

b)创建 :

空集合 s=set()

非空集合 s={1,2,3,4,5}

c)操作:

并集:s1|s2|s3

交集:s1&s2&s3

差集:s1-s2-s3

对等差分 :s1^s2^s3 并集减交集

d)判断

超集:issupperset()

子集:issubset()

相交: isdisjoint()

10、字典(Dict)

性质类似于Map映射

a)特性

通过键值对(key-value)来储存数据

储存的数据是无序的,可使用键索引

键是必须唯一,但值可以不唯一

键的类型只能是字符串、数字或元组,值可以是任何

b)创建

#空Dict

empty_dict = {}

#键值对

dict_1 = {1:'one', 2:'two', 3:'three'}

#构造函数

dict_2 = dict(one=1, two=2, three=3)

c)获取

x=d[1]

x=d['one']

x=d.get(1,"缺省值") #当get的key值不存在时,返回缺省值

d)遍历

#遍历字典的键

for k in x: #默认是Dict的键值集合,x.keys()

print(k)

#遍历字典的值

for v in x.values():

print(v)

#遍历字典的键和值

for k,v in x.items():

print(k,v)

11、字符串

a )定义 :

单引号 双引号 三引号(允许字符串换行)

#单引号

str1 = 'allows embedded "double" quotes'

#双引号

str2 = "allows embedded 'single' quotes"

#三引号

str3= '''Three single quotes,

span multiple lines'''

str4="""Three double quotes,

span multiple lines"""

b)操作

字符串操作说明举例

string[n:m]

字符串切片

string='Hello World\n' string[0] string[:-1] string[3:5]

int()

字符串转数值类型

int("123") float("123")

str()

数值类型转字符串

str(123)str(123.456)

ord()

字符转Unicode码

ord('A')

chr()

Unicode码转字符

chr(65)

lower()

转成小写字符串

"WELCOME".lower()

upper()

转成大写字符串

"welcome".upper()

split()分割字符串N'] words = "WELCOME TO PYTHON".split(' TO ') print(words)# ['WELCOME', 'PYTHON']

join()

将序列中的元素以指定的字符连接生成一个新的字符串

s = '++' list=['1', '2', '3'] s.join(list) #result is '1++2++3' s.join('why') #result is 'w++h++y'

strip()lstrip()rstrip()

用于移除字符串头尾/头/尾指定的字符(默认为空格或换行符)或字符序列

s = ' "hi\\ \n\tPython" ' s.strip()# result is '"hi\ \n\tPython"' s.strip(' "no') # result is 'hi\ \n\tPyth'

in判断是否为子串'or' in 'toronto or orlando' # True

find()

返回子串开始的索引值,找不到子串时返回-1

s = 'toronto or orlando's.find('or') # return index 1 s.find('or', 2, 8) # return -1, meaning not found

index()

返回子串开始的索引值,找不到子串时抛出异常

s = 'toronto or orlando's.index('or') # return index 1 s.index('or', 2, 8) # throw ValueError: substring not found

count()

统计字符串里某个字符出现的次数

s = 'toronto or orlando' s.count('or') # return 3 s.count('or', 2) # return 2 s.count('or', 2, 9) # return 0

replace()

方法把字符串中的 旧字符串替换成新字符串

s = 'toronto or orlando's.replace('or', '/x\')# result: t/x\onto /x\ /x\lando s.replace('or', '/x\', 2)# result: t/x\onto /x\ orlando

startswith()检查字符串是否是以指定子字符串开头s = 'toronto or orlando' s.startswith('or') # return False s.startswith('or', 1) # return True s.startswith(('or', 'tor')) # return True

endswith()

检查字符串是否是以指定子字符串结尾

s = 'toronto or orlando' s.endswith('and') # return False s.endswith('and', 1, -1) # return True s.endswith(('and', 'do')) # return True

maketrans() translate()

字符串转换,maketrans() 设置转换模式,一一替换,translate()执行转换操作。可以一次定义多个模式

s = 'toronto or orlando' # define a translation table: table=s.maketrans('on', '.N') # o change to . # n change to N # translate using above table s.translate(table) # result: 't.r.Nt. .r .rlaNd.'

12、布尔值与空值

空值: None ,特殊常量,表示空值,注意大小写

布尔值:True or False

有多种表示形式,只有字典和集合时以空集为True

TrueFalse

不为0的数值

0, 0.0, 0+0j

非空字符串

空字符串

非空列表

空列表

空字典

非空字典

空集合

非空集合

-

None

布尔操作:or 、and、not

13、比较操作符

操作符解释

<

小于

<=

小于等于

>

大于

>=

大于等于

==

等于

!=

不等于

is

判断两个标识符是不是引用自一个对象

is not

判断两个标识符是不是引用自不同对象

14、流程控制语句

条件选择语句 if

if guess > secret :

print("too large")

elif guess < secret :# elif is optional

print("too small")

else :# else is optional

print("equals")

循环语句

Python中循环也有else语句,当循环条件不再满足时即循环结束时执行

while guessed != secret :

guessed = int(input("Guess a number: "))

else : # else is optional

print("Congratulation!")

for i in range(0, 8, 2) :

print(i)

else : # else is optional

print("Done!")

break\continue\pass

break 将跳出循环语句,else也不会被执行

continue,同

pass ,占位语句,啥也不干

三元表达式: val1 if bool else val2 ,bool为真时返回val1,为假时返回val2

15、列表生成式 (重点)

列表生成式 : 输出表达式 循环条件 判断语句

[x**2 for x in range(10) ] #1~10的数平方列表

[x for x in range(2,100) if x % 2 == 0] #2~100的偶数列表

from math import pi

[str(round(pi, i)) for i in range(1, 10)] #Π的位数梯级表

[[1 if r==c or r+c==3 else 0 for c in range(4)]for r in range(4)] #矩阵列表

sentence = 'what is this'

{ c for c in sentence if c != ' ' } #生成集合

sentence = 'what is this'

(w for w in sentence.split() if 'i' in w) #生成生成器

sentence = 'what is this'

{ w:{c for c in w if c not in 'aeiou'} for w in sentence.split() } #生成字典

16、enumerate函数

将可遍历的有序对象(列表,元组,字符串)组合为一个有索引号的序列,同时返回下标和数据

for i, v in enumerate('ABCDEFG') :

print(i, v)

四、变量作用域

1、全局变量:

定义在模块中的变量,全局变量在整个模块中可见

globals()函数:返回所有定义在改模块中的全局变量

修改全局变量时,要先使用global关键字声明变量

msg = 'created in module'

def outer() :

def inner() :

global msg

msg = 'changed in inner'

inner()

outer()

print(msg)

2、局部变量

定义在函数中的变量

局部变量仅在定义的函数中中可见

locals()函数:返回所有定义在函数中的局部变量

自由变量:在函数中使用,但未定义在该函数中的非全局变量。

自由变量:修改时要先使用nonlocal关键字声明变量

def outer_1() :

msg = 'created in outer'

def inner() :

print(msg)# msg is a Free variable

inner()

outer_1()

3、作用域规则LEGB

使用 LEGB 的顺序来查找一个符号对应的对象

Local -> Enclosed -> Global -> Built-in

Local:一个函数或者类方法内部

Enclosed:嵌套函数内

Global:模块层级

Built-in:Python内置符号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值