本文目录一览:
- 1、python语言基础知识有哪些?
- 2、python语言基础知识是什么?
- 3、python 基础教程
- 4、利用Python进行数据分析笔记:3.1数据结构
- 5、零基础Python学习路线图,Python初学者必须要了解,让你
- 6、万字干货,Python语法大合集,一篇文章带你入门
python语言基础知识有哪些?
一、Python语言的简述
Python语言是一种解释型、面向对象的编程语言,是一种开源语言。
Python属于动态类定义语言,也是一种强调类型语言。
二、Python语言的特点
1、简单、高级
2、面向对象
3、可扩展性、免费和开源的
4、可移植型、可嵌入型、丰富的库
三、Python语言的应用范围
1、操作系统管理
2、科学计算
3、Web应用
4、图形用户界面(GUI)开发
5、其他,例如游戏开发等
优点
简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。
易学:Python极其容易上手,因为Python有极其简单的说明文档。
易读、易维护:风格清晰划一、强制缩进。
用途广泛。
速度快:Python的底层是用C语言写的,很多标准库和第三方库也都是用C写的,运行速度非常快。
免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。
python语言基础知识是什么?
如下:
一、Python语言基础
Python核心:Python数据基本运算、语句、容器、函数
Python 面向对象编程:OOA、OOD、OOP、天龙八部技能系统框架 设计 Python高级:模块、包、函数式编程、文件。
二、Python高级软件开发技术
Linux操作系统 :Linux常用命令、编辑工具、vim/Pycharm
数据结构与算法 :链表、栈和队列、树和二叉树、查找排序
IO网络编程:文件操作、字节流读写、网络协议、套接 字、TCP/UDP
并发编程:多进程、进程池、进程通信、多线程、线程锁、多任务并发、IO模型、协程
Python 正则表达式:正则表达式、贪婪模和非贪婪模式、re模块
MySQL基础:数据库应用、SQL语言、Mysql增删改查、 pymysql模块
三、Python Web全栈式工程师
HTML/CSS HTML5标签,CSS选择器,CSS样式属性以 及值
Java :JS流程控制,DOM,BOM,JQuery API
MySQL高级:MySQL索引、事务、引擎、优化、pymysql 模块使用
Python Django 框架:Django、模板、视图、模型、请求对象等
Ajax Ajax,:JSON, Jquery对Ajax的支持, 跨域访问
四、Python 爬虫
Redis:Redis、string、hash、list、set、zset、 Python与MySQL和Redis结合
爬虫、HTTP、BeautifulSoup,XPath,Scrapy其实无论是学习什么知识,都要有一个对学习目标的清楚认识。 只有这样才能朝着目标持续前进,少走弯路,从学习中得到不断的提升,享受python学习计划的过程。
python 基础教程
运算
a = 21
b = 10
c = 0
c = a + b
print "1 - c 的值为:", c
c = a - b
print "2 - c 的值为:", c
c = a * b
print "3 - c 的值为:", c
c = a / b
print "4 - c 的值为:", c
c = a % b
print "5 - c 的值为:", c
a = 2
b = 3
c = a**b
print "6 - c 的值为:", c
a = 10
b = 5
c = a//b
print "7 - c 的值为:", c
python比较
a = 21
b = 10
c = 0
if ( a == b ):
print "1 - a 等于 b"
else:
print "1 - a 不等于 b"
if ( a != b ):
print "2 - a 不等于 b"
else:
print "2 - a 等于 b"
if ( a b ):
print "3 - a 不等于 b"
else:
print "3 - a 等于 b"
if ( a b ):
print "4 - a 小于 b"
else:
print "4 - a 大于等于 b"
if ( a b ):
print "5 - a 大于 b"
else:
print "5 - a 小于等于 b"
a = 5
b = 20
if ( a = b ):
print "6 - a 小于等于 b"
else:
print "6 - a 大于 b"
if ( b = a ):
print "7 - b 大于等于 a"
else:
print "7 - b 小于 a"
赋值
a = 21
b = 10
c = 0
c = a + b
print "1 - c 的值为:", c
c += a
print "2 - c 的值为:", c
c *= a
print "3 - c 的值为:", c
c /= a
print "4 - c 的值为:", c
c = 2
c %= a
print "5 - c 的值为:", c
c **= a
print "6 - c 的值为:", c
c //= a
print "7 - c 的值为:", c
逻辑运算符:
a = 10
b = 20
if ( a and b ):
print "1 - 变量 a 和 b 都为 true"
else:
print "1 - 变量 a 和 b 有一个不为 true"
if ( a or b ):
print "2 - 变量 a 和 b 都为 true,或其中一个变量为 true"
else:
print "2 - 变量 a 和 b 都不为 true"
a = 0
if ( a and b ):
print "3 - 变量 a 和 b 都为 true"
else:
print "3 - 变量 a 和 b 有一个不为 true"
if ( a or b ):
print "4 - 变量 a 和 b 都为 true,或其中一个变量为 true"
else:
print "4 - 变量 a 和 b 都不为 true"
if not( a and b ):
print "5 - 变量 a 和 b 都为 false,或其中一个变量为 false"
else:
print "5 - 变量 a 和 b 都为 true"
in,not in
a = 10
b = 20
list = [1, 2, 3, 4, 5 ];
if ( a in list ):
print "1 - 变量 a 在给定的列表中 list 中"
else:
print "1 - 变量 a 不在给定的列表中 list 中"
if ( b not in list ):
print "2 - 变量 b 不在给定的列表中 list 中"
else:
print "2 - 变量 b 在给定的列表中 list 中"
a = 2
if ( a in list ):
print "3 - 变量 a 在给定的列表中 list 中"
else:
print "3 - 变量 a 不在给定的列表中 list 中"
条件
flag = False
name = 'luren'
if name == 'python': # 判断变量否为'python'
flag = True # 条件成立时设置标志为真
print 'welcome boss' # 并输出欢迎信息
else:
print name
num = 5
if num == 3: # 判断num的值
print 'boss'
elif num == 2:
print 'user'
elif num == 1:
print 'worker'
elif num 0: # 值小于零时输出
print 'error'
else:
print 'roadman' # 条件均不成立时输出
循环语句:
count = 0
while (count 9):
print 'The count is:', count
count = count + 1
print "Good bye!"
i = 1
while i 10:
i += 1
if i%2 0: # 非双数时跳过输出
continue
print i # 输出双数2、4、6、8、10
i = 1
while 1: # 循环条件为1必定成立
print i # 输出1~10
i += 1
if i 10: # 当i大于10时跳出循环
break
for letter in 'Python': # 第一个实例
print '当前字母 :', letter
fruits = ['banana', 'apple', 'mango']
for fruit in fruits: # 第二个实例
print '当前水果 :', fruit
print "Good bye!"
获取用户输入:raw_input
var = 1
while var == 1 : # 该条件永远为true,循环将无限执行下去
num = raw_input("Enter a number :")
print "You entered: ", num
print "Good bye!"
range,len
fruits = ['banana', 'apple', 'mango']
for index in range(len(fruits)):
print '当前水果 :', fruits[index]
print "Good bye!"
python数学函数:
abs,cell,cmp,exp,fabs,floor,log,log10,max,min,mod,pow,round,sqrt
randrange
访问字符串的值
var1 = 'Hello World!'
var2 = "Python Runoob"
print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]
转义字符
格式化输出
print "My name is %s and weight is %d kg!" % ('Zara', 21)
字符串函数:
添加元素
list = [] ## 空列表
list.append('Google') ## 使用 append() 添加元素
list.append('Runoob')
print list
删除元素
list1 = ['physics', 'chemistry', 1997, 2000]
print list1
del list1[2]
print "After deleting value at index 2 : "
print list1
列表操作
列表方法
删除字典
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
del dict['Name']; # 删除键是'Name'的条目
dict.clear(); # 清空词典所有条目
del dict ; # 删除词典
print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];
字典的函数:
当前时间戳:
import time
time.time()
格式化日期输出
import time
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())
a = "Sat Mar 28 22:24:24 2016"
print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))
获取某个月日历:calendar
import calendar
cal = calendar.month(2016, 1)
print "以下输出2016年1月份的日历:"
print cal
当前日期和时间
import datetime
i = datetime.datetime.now()
print ("当前的日期和时间是 %s" % i)
print ("ISO格式的日期和时间是 %s" % i.isoformat() )
print ("当前的年份是 %s" %i.year)
print ("当前的月份是 %s" %i.month)
print ("当前的日期是 %s" %i.day)
print ("dd/mm/yyyy 格式是 %s/%s/%s" % (i.day, i.month, i.year) )
print ("当前小时是 %s" %i.hour)
print ("当前分钟是 %s" %i.minute)
print ("当前秒是 %s" %i.second)
不定长参数:*
lambda:匿名函数
def....
python模块搜索路径
获取用户输入
str = raw_input("请输入:")
print "你输入的内容是: ", str
input可以接收表达式
open参数
write要自己添加换行符
读取10个字符
重命名:os.rename
os.remove
os.mkdir os.chdir
os.getcwd
os.rmdir
open参数
file的方法
异常:
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print "Error: 没有找到文件或读取文件失败"
else:
print "内容写入文件成功"
fh.close()
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
finally:
print "Error: 没有找到文件或读取文件失败"
用户自定义异常:
os 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示:
| 序号 | 方法及描述 |
| 1 |
os.access(path, mode)
检验权限模式 |
| 2 |
os.chdir(path)
改变当前工作目录 |
| 3 |
os.chflags(path, flags)
设置路径的标记为数字标记。 |
| 4 |
os.chmod(path, mode)
更改权限 |
| 5 |
os.chown(path, uid, gid)
更改文件所有者 |
| 6 |
os.chroot(path)
改变当前进程的根目录 |
| 7 |
os.close(fd)
关闭文件描述符 fd |
| 8 |
os.closerange(fd_low, fd_high)
关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略 |
| 9 |
os.dup(fd)
复制文件描述符 fd |
| 10 |
os.dup2(fd, fd2)
将一个文件描述符 fd 复制到另一个 fd2 |
| 11 |
os.fchdir(fd)
通过文件描述符改变当前工作目录 |
| 12 |
os.fchmod(fd, mode)
改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。 |
| 13 |
os.fchown(fd, uid, gid)
修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。 |
| 14 |
os.fdatasync(fd)
强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。 |
| 15 |
os.fdopen(fd[, mode[, bufsize]])
通过文件描述符 fd 创建一个文件对象,并返回这个文件对象 |
| 16 |
os.fpathconf(fd, name)
返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。 |
| 17 |
os.fstat(fd)
返回文件描述符fd的状态,像stat()。 |
| 18 |
os.fstatvfs(fd)
返回包含文件描述符fd的文件的文件系统的信息,像 statvfs() |
| 19 |
os.fsync(fd)
强制将文件描述符为fd的文件写入硬盘。 |
| 20 |
os.ftruncate(fd, length)
裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。 |
| 21 |
os.getcwd()
返回当前工作目录 |
| 22 |
os.getcwdu()
返回一个当前工作目录的Unicode对象 |
| 23 |
os.isatty(fd)
如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。 |
| 24 |
os.lchflags(path, flags)
设置路径的标记为数字标记,类似 chflags(),但是没有软链接 |
| 25 |
os.lchmod(path, mode)
修改连接文件权限 |
| 26 |
os.lchown(path, uid, gid)
更改文件所有者,类似 chown,但是不追踪链接。 |
| 27 |
os.link(src, dst)
创建硬链接,名为参数 dst,指向参数 src |
| 28 |
os.listdir(path)
返回path指定的文件夹包含的文件或文件夹的名字的列表。 |
| 29 |
os.lseek(fd, pos, how)
设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效 |
| 30 |
os.lstat(path)
像stat(),但是没有软链接 |
| 31 |
os.major(device)
从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。 |
| 32 |
os.makedev(major, minor)
以major和minor设备号组成一个原始设备号 |
| 33 |
os.makedirs(path[, mode])
递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。 |
| 34 |
os.minor(device)
从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。 |
| 35 |
os.mkdir(path[, mode])
以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。 |
| 36 |
os.mkfifo(path[, mode])
创建命名管道,mode 为数字,默认为 0666 (八进制) |
| 37 |
os.mknod(filename[, mode=0600, device])
创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
|
| 38 |
os.open(file, flags[, mode])
打开一个文件,并且设置需要的打开选项,mode参数是可选的 |
| 39 |
os.openpty()
打开一个新的伪终端对。返回 pty 和 tty的文件描述符。 |
| 40 |
os.pathconf(path, name)
返回相关文件的系统配置信息。 |
| 41 |
os.pipe()
创建一个管道. 返回一对文件描述符(r, w) 分别为读和写 |
| 42 |
os.popen(command[, mode[, bufsize]])
从一个 command 打开一个管道 |
| 43 |
os.read(fd, n)
从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。 |
| 44 |
os.readlink(path)
返回软链接所指向的文件 |
| 45 |
os.remove(path)
删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。 |
| 46 |
os.removedirs(path)
递归删除目录。 |
| 47 |
os.rename(src, dst)
重命名文件或目录,从 src 到 dst |
| 48 |
os.renames(old, new)
递归地对目录进行更名,也可以对文件进行更名。 |
| 49 |
os.rmdir(path)
删除path指定的空目录,如果目录非空,则抛出一个OSError异常。 |
| 50 |
os.stat(path)
获取path指定的路径的信息,功能等同于C API中的stat()系统调用。 |
| 51 |
os.stat_float_times([newvalue])
决定stat_result是否以float对象显示时间戳
|
| 52 |
os.statvfs(path)
获取指定路径的文件系统统计信息 |
| 53 |
os.symlink(src, dst)
创建一个软链接 |
| 54 |
os.tcgetpgrp(fd)
返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组 |
| 55 |
os.tcsetpgrp(fd, pg)
设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。 |
| 56 |
os.tempnam([dir[, prefix]])
返回唯一的路径名用于创建临时文件。 |
| 57 |
os.tmpfile()
返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。 |
| 58 |
os.tmpnam()
为创建一个临时文件返回一个唯一的路径 |
| 59 |
os.ttyname(fd)
返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。 |
| 60 |
os.unlink(path)
删除文件路径 |
| 61 |
os.utime(path, times)
返回指定的path文件的访问和修改的时间。 |
| 62 |
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
输出在文件夹中的文件名通过在树中游走,向上或者向下。 |
| 63 |
os.write(fd, str)
写入字符串到文件描述符 fd中. 返回实际写入的字符串长度 |
利用Python进行数据分析笔记:3.1数据结构
元组是一种固定长度、不可变的Python对象序列。创建元组最简单的办法是用逗号分隔序列值:
tuple 函数将任意序列或迭代器转换为元组:
中括号 [] 可以获取元组的元素, Python中序列索引从0开始 :
元组一旦创建,各个位置上的对象是无法被修改的,如果元组的一个对象是可变的,例如列表,你可以在它内部进行修改:
可以使用 + 号连接元组来生成更长的元组:
元组乘以整数,则会和列表一样,生成含有多份拷贝的元组:
将元组型的表达式赋值给变量,Python会对等号右边的值进行拆包:
拆包的一个常用场景就是遍历元组或列表组成的序列:
*rest 用于在函数调用时获取任意长度的位置参数列表:
count 用于计量某个数值在元组中出现的次数:
列表的长度可变,内容可以修改。可以使用 [] 或者 list 类型函数来定义列表:
append 方法将元素添加到列表尾部:
insert 方法可以将元素插入到指定列表位置:
( 插入位置范围在0到列表长度之间 )
pop 是 insert 的反操作,将特定位置的元素移除并返回:
remove 方法会定位第一个符合要求的值并移除它:
in 关键字可以检查一个值是否在列表中;
not in 表示不在:
+ 号可以连接两个列表:
extend 方法可以向该列表添加多个元素:
使用 extend 将元素添加到已经存在的列表是更好的方式,比 + 快。
sort 方法可以对列表进行排序:
key 可以传递一个用于生成排序值的函数,例如通过字符串的长度进行排序:
bisect.bisect 找到元素应当被插入的位置,返回位置信息
bisect.insort 将元素插入到已排序列表的相应位置保持序列排序
bisect 模块的函数并不会检查列表是否已经排序,因此对未排序列表使用bisect不会报错,但是可能导致不正确结果
切片符号可以对大多数序列类型选取子集,基本形式是 [start:stop]
起始位置start索引包含,结束位置stop索引不包含
切片还可以将序列赋值给变量:
start和stop可以省略,默认传入起始位置或结束位置,负索引可以从序列尾部进行索引:
步进值 step 可以在第二个冒号后面使用, 意思是每隔多少个数取一个值:
对列表或元组进行翻转时,一种很聪明的用法时向步进值传值-1:
dict(字典)可能是Python内建数据结构中最重要的,它更为常用的名字是 哈希表 或者 关联数组 。
字典是键值对集合,其中键和值都是Python对象。
{} 是创建字典的一种方式,字典中用逗号将键值对分隔:
你可以访问、插入或设置字典中的元素,:
in 检查字典是否含有一个键:
del 或 pop 方法删除值, pop 方法会在删除的同时返回被删的值,并删除键:
update 方法将两个字典合并:
update方法改变了字典元素位置,对于字典中已经存在的键,如果传给update方法的数据也含有相同的键,则它的值将会被覆盖。
字典的值可以是任何Python对象,但键必须是不可变的对象,比如标量类型(整数、浮点数、字符串)或元组(且元组内对象也必须是不可变对象)。
通过 hash 函数可以检查一个对象是否可以哈希化(即是否可以用作字典的键):
集合是一种无序且元素唯一的容器。
set 函数或者是用字面值集与大括号,创建集合:
union 方法或 | 二元操作符获得两个集合的联合即两个集合中不同元素的并集:
intersection 方法或 操作符获得交集即两个集合中同时包含的元素:
常用的集合方法列表:
和字典类似,集合的元素必须是不可变的。如果想要包含列表型的元素,必须先转换为元组:
零基础Python学习路线图,Python初学者必须要了解,让你
近几年Python的受欢迎程度可谓是扶摇直上,当然了学习的人也是愈来愈多。一些学习Python的小白在学习初期,总希望能够得到一份
Python学习路线图,小编经过多方汇总为大家汇总了一份Python学习路线图。
对于一个零基础的想学习python的朋友来说,学习方法很重要, 学习方法不对努力白费 一定要有一个正确的学习线路与方法。
Python学习路线一:Python基础
必学知识:【Linux基础】【Python基础语法】【Python字符串】【文件操作】【异常处理】【Python面向对象】【项目实战】
路线讲解:该路线循序渐进,科学合理,帮助学习者建立正确的编程思想,具备基本的编程能力;
Python学习路线二:Python高级编程
必学知识:【Python平台迁移Linux】【Python常用第三方库】【Python高级语法】【Python正则表达式】【网路编程】【系统编程】【数据结构与算法】【项目实战】
路线讲解:该路线强调数据结构和算法的学习,着重提升学习者的编程核心能力;使学习者能够熟练掌握Python高级用法及网络相关知识,能够独立承担Python网络相关的开发;
Python学习路线三:web前端开发
必学知识:【HTML】【CSS】【UI基础】【JavaScript】【DOM】【事件】【jQuery】【混合开发】【项目实战】
路线讲解:使学习者掌握web前端开发的相关知识,在工作中搭建高质量网站;
Python学习路线四:后端开发
必学知识:【Linux网站配置】【git项目管理】【Python框架Django】【flask框架】【接口开发】【数据库MySQL、MongoDB、Redis开发】
路线讲解:熟练掌握框架的使用,掌握数据库原理及相关优化;
Python学习路线五:爬虫开发
必学知识:【爬虫开发原理】【requests+beautifulsoup4静态网页解析】【selenium动态网页解析】【scrapy框架】【分布式爬虫系统】【项目实战】
路线讲解:使学习者能够掌握爬虫的工作原理,独立承担爬虫的相关工作,亦能够独立设计及实现分布式爬虫框架;
Python学习路线六:人工智能
必学知识:【数据分析】【数据可视化】【机器学习理论与实践】【TensorFlow图像实战】【项目实战Python人工智能项目】
路线讲解:理论与实践并重,加强理论的讲解,理解机器的学习原理,更加系统完善的了解整个Python学习流程。
以上就是整套Python学习路线图,这套学习路线图从学习者实际出发经过长时间的研究孕育而成,可以说适合每一位Python学习者。
万字干货,Python语法大合集,一篇文章带你入门
这份资料非常纯粹,只有Python的基础语法,专门针对想要学习Python的小白。
Python中用#表示单行注释,#之后的同行的内容都会被注释掉。
使用三个连续的双引号表示多行注释,两个多行注释标识之间内容会被视作是注释。
Python当中的数字定义和其他语言一样:
我们分别使用+, -, *, /表示加减乘除四则运算符。
这里要注意的是,在Python2当中,10/3这个操作会得到3,而不是3.33333。因为除数和被除数都是整数,所以Python会自动执行整数的计算,帮我们把得到的商取整。如果是10.0 / 3,就会得到3.33333。目前Python2已经不再维护了,可以不用关心其中的细节。
但问题是Python是一个 弱类型 的语言,如果我们在一个函数当中得到两个变量,是无法直接判断它们的类型的。这就导致了同样的计算符可能会得到不同的结果,这非常蛋疼。以至于程序员在运算除法的时候,往往都需要手工加上类型转化符,将被除数转成浮点数。
在Python3当中拨乱反正,修正了这个问题,即使是两个整数相除,并且可以整除的情况下,得到的结果也一定是浮点数。
如果我们想要得到整数,我们可以这么操作:
两个除号表示 取整除 ,Python会为我们保留去除余数的结果。
除了取整除操作之外还有取余数操作,数学上称为取模,Python中用%表示。
Python中支持 乘方运算 ,我们可以不用调用额外的函数,而使用**符号来完成:
当运算比较复杂的时候,我们可以用括号来强制改变运算顺序。
Python中用首字母大写的True和False表示真和假。
用and表示与操作,or表示或操作,not表示非操作。而不是C++或者是Java当中的, || 和!。
在Python底层, True和False其实是1和0 ,所以如果我们执行以下操作,是不会报错的,但是在逻辑上毫无意义。
我们用==判断相等的操作,可以看出来True==1, False == 0.
我们要小心Python当中的bool()这个函数,它并不是转成bool类型的意思。如果我们执行这个函数,那么 只有0会被视作是False,其他所有数值都是True :
Python中用==判断相等,表示大于,=表示大于等于, 表示小于,=表示小于等于,!=表示不等。
我们可以用and和or拼装各个逻辑运算:
注意not,and,or之间的优先级,其中not and or。如果分不清楚的话,可以用括号强行改变运行顺序。
关于list的判断,我们常用的判断有两种,一种是刚才介绍的==,还有一种是is。我们有时候也会简单实用is来判断,那么这两者有什么区别呢?我们来看下面的例子:
Python是全引用的语言,其中的对象都使用引用来表示。is判断的就是 两个引用是否指向同一个对象 ,而==则是判断两个引用指向的具体内容是否相等。举个例子,如果我们把引用比喻成地址的话,is就是判断两个变量的是否指向同一个地址,比如说都是沿河东路XX号。而==则是判断这两个地址的收件人是否都叫张三。
显然,住在同一个地址的人一定都叫张三,但是住在不同地址的两个人也可以都叫张三,也可以叫不同的名字。所以如果a is b,那么a == b一定成立,反之则不然。
Python当中对字符串的限制比较松, 双引号和单引号都可以表示字符串 ,看个人喜好使用单引号或者是双引号。我个人比较喜欢单引号,因为写起来方便。
字符串也支持+操作,表示两个字符串相连。除此之外,我们把两个字符串写在一起,即使没有+,Python也会为我们拼接:
我们可以使用[]来查找字符串当中某个位置的字符,用 len 来计算字符串的长度。
我们可以在字符串前面 加上f表示格式操作 ,并且在格式操作当中也支持运算,比如可以嵌套上len函数等。不过要注意,只有Python3.6以上的版本支持f操作。
最后是None的判断,在Python当中None也是一个对象, 所有为None的变量都会指向这个对象 。根据我们前面所说的,既然所有的None都指向同一个地址,我们需要判断一个变量是否是None的时候,可以使用is来进行判断,当然用==也是可以的,不过我们通常使用is。
理解了None之后,我们再回到之前介绍过的bool()函数,它的用途其实就是判断值是否是空。所有类型的 默认空值会被返回False ,否则都是True。比如0,"",[], {}, ()等。
除了上面这些值以外的所有值传入都会得到True。
Python当中的标准输入输出是 input和print 。
print会输出一个字符串,如果传入的不是字符串会自动调用__str__方法转成字符串进行输出。 默认输出会自动换行 ,如果想要以不同的字符结尾代替换行,可以传入end参数:
使用input时,Python会在命令行接收一行字符串作为输入。可以在input当中传入字符串,会被当成提示输出:
Python支持 三元表达式 ,但是语法和C++不同,使用if else结构,写成:
上段代码等价于:
Python中用[]表示空的list,我们也可以直接在其中填充元素进行初始化:
使用append和pop可以在list的末尾插入或者删除元素:
list可以通过[]加上下标访问指定位置的元素,如果是负数,则表示 倒序访问 。-1表示最后一个元素,-2表示倒数第二个,以此类推。如果访问的元素超过数组长度,则会出发 IndexError 的错误。
list支持切片操作,所谓的切片则是从原list当中 拷贝 出指定的一段。我们用start: end的格式来获取切片,注意,这是一个 左闭右开区间 。如果留空表示全部获取,我们也可以额外再加入一个参数表示步长,比如[1:5:2]表示从1号位置开始,步长为2获取元素。得到的结果为[1, 3]。如果步长设置成-1则代表反向遍历。
如果我们要指定一段区间倒序,则前面的start和end也需要反过来,例如我想要获取[3: 6]区间的倒序,应该写成[6:3:-1]。
只写一个:,表示全部拷贝,如果用is判断拷贝前后的list会得到False。可以使用del删除指定位置的元素,或者可以使用remove方法。
insert方法可以 指定位置插入元素 ,index方法可以查询某个元素第一次出现的下标。
list可以进行加法运算,两个list相加表示list当中的元素合并。 等价于使用extend 方法:
我们想要判断元素是否在list中出现,可以使用 in关键字 ,通过使用len计算list的长度:
tuple和list非常接近,tuple通过()初始化。和list不同, tuple是不可变对象 。也就是说tuple一旦生成不可以改变。如果我们修改tuple,会引发TypeError异常。
由于小括号是有改变优先级的含义,所以我们定义单个元素的tuple, 末尾必须加上逗号 ,否则会被当成是单个元素:
tuple支持list当中绝大部分操作:
我们可以用多个变量来解压一个tuple:
解释一下这行代码:
我们在b的前面加上了星号, 表示这是一个list 。所以Python会在将其他变量对应上值的情况下,将剩下的元素都赋值给b。
补充一点,tuple本身虽然是不可变的,但是 tuple当中的可变元素是可以改变的 。比如我们有这样一个tuple:
我们虽然不能往a当中添加或者删除元素,但是a当中含有一个list,我们可以改变这个list类型的元素,这并不会触发tuple的异常:
dict也是Python当中经常使用的容器,它等价于C++当中的map,即 存储key和value的键值对 。我们用{}表示一个dict,用:分隔key和value。
对 。我们用{}表示一个dict,用:分隔key和value。
dict的key必须为不可变对象,所以 list、set和dict不可以作为另一个dict的key ,否则会抛出异常:
我们同样用[]查找dict当中的元素,我们传入key,获得value,等价于get方法。
我们可以call dict当中的keys和values方法,获取dict当中的所有key和value的集合,会得到一个list。在Python3.7以下版本当中,返回的结果的顺序可能和插入顺序不同,在Python3.7及以上版本中,Python会保证返回的顺序和插入顺序一致:
我们也可以用in判断一个key是否在dict当中,注意只能判断key。
如果使用[]查找不存在的key,会引发KeyError的异常。如果使用 get方法则不会引起异常,只会得到一个None :
setdefault方法可以 为不存在的key 插入一个value,如果key已经存在,则不会覆盖它:
我们可以使用update方法用另外一个dict来更新当前dict,比如a.update(b)。对于a和b交集的key会被b覆盖,a当中不存在的key会被插入进来:
我们一样可以使用del删除dict当中的元素,同样只能传入key。
Python3.5以上的版本支持使用**来解压一个dict:
set是用来存储 不重复元素 的容器,当中的元素都是不同的,相同的元素会被删除。我们可以通过set(),或者通过{}来进行初始化。注意当我们使用{}的时候,必须要传入数据,否则Python会将它和dict弄混。
set当中的元素也必须是不可变对象,因此list不能传入set。
可以调用add方法为set插入元素:
set还可以被认为是集合,所以它还支持一些集合交叉并补的操作。
set还支持 超集和子集的判断 ,我们可以用大于等于和小于等于号判断一个set是不是另一个的超集或子集:
和dict一样,我们可以使用in判断元素在不在set当中。用copy可以拷贝一个set。
Python当中的判断语句非常简单,并且Python不支持switch,所以即使是多个条件,我们也只能 罗列if-else 。
我们可以用in来循环迭代一个list当中的内容,这也是Python当中基本的循环方式。
如果我们要循环一个范围,可以使用range。range加上一个参数表示从0开始的序列,比如range(10),表示[0, 10)区间内的所有整数:
如果我们传入两个参数,则 代表迭代区间的首尾 。
如果我们传入第三个元素,表示每次 循环变量自增的步长 。
如果使用enumerate函数,可以 同时迭代一个list的下标和元素 :
while循环和C++类似,当条件为True时执行,为false时退出。并且判断条件不需要加上括号:
Python当中使用 try和except捕获异常 ,我们可以在except后面限制异常的类型。如果有多个类型可以写多个except,还可以使用else语句表示其他所有的类型。finally语句内的语法 无论是否会触发异常都必定执行 :
在Python当中我们经常会使用资源,最常见的就是open打开一个文件。我们 打开了文件句柄就一定要关闭 ,但是如果我们手动来编码,经常会忘记执行close操作。并且如果文件异常,还会触发异常。这个时候我们可以使用with语句来代替这部分处理,使用with会 自动在with块执行结束或者是触发异常时关闭打开的资源 。
以下是with的几种用法和功能:
凡是可以使用in语句来迭代的对象都叫做 可迭代对象 ,它和迭代器不是一个含义。这里只有可迭代对象的介绍,想要了解迭代器的具体内容,请移步传送门:
Python——五分钟带你弄懂迭代器与生成器,夯实代码能力
当我们调用dict当中的keys方法的时候,返回的结果就是一个可迭代对象。
我们 不能使用下标来访问 可迭代对象,但我们可以用iter将它转化成迭代器,使用next关键字来获取下一个元素。也可以将它转化成list类型,变成一个list。
使用def关键字来定义函数,我们在传参的时候如果指定函数内的参数名, 可以不按照函数定义的顺序 传参:
可以在参数名之前加上*表示任意长度的参数,参数会被转化成list:
也可以指定任意长度的关键字参数,在参数前加上**表示接受一个dict:
当然我们也可以两个都用上,这样可以接受任何参数:
传入参数的时候我们也可以使用*和**来解压list或者是dict:
Python中的参数 可以返回多个值 :
函数内部定义的变量即使和全局变量重名,也 不会覆盖全局变量的值 。想要在函数内部使用全局变量,需要加上 global 关键字,表示这是一个全局变量:
Python支持 函数式编程 ,我们可以在一个函数内部返回一个函数:
Python中可以使用lambda表示 匿名函数 ,使用:作为分隔,:前面表示匿名函数的参数,:后面的是函数的返回值:
我们还可以将函数作为参数使用map和filter,实现元素的批量处理和过滤。关于Python中map、reduce和filter的使用,具体可以查看之前的文章:
五分钟带你了解map、reduce和filter
我们还可以结合循环和判断语来给list或者是dict进行初始化:
使用 import语句引入一个Python模块 ,我们可以用.来访问模块中的函数或者是类。
我们也可以使用from import的语句,单独引入模块内的函数或者是类,而不再需要写出完整路径。使用from import *可以引入模块内所有内容(不推荐这么干)
可以使用as给模块内的方法或者类起别名:
我们可以使用dir查看我们用的模块的路径:
这么做的原因是如果我们当前的路径下也有一个叫做math的Python文件,那么 会覆盖系统自带的math的模块 。这是尤其需要注意的,不小心会导致很多奇怪的bug。
我们来看一个完整的类,相关的介绍都在注释当中
以上内容的详细介绍之前也有过相关文章,可以查看:
Python—— slots ,property和对象命名规范
下面我们来看看Python当中类的使用:
这里解释一下,实例和对象可以理解成一个概念,实例的英文是instance,对象的英文是object。都是指类经过实例化之后得到的对象。
继承可以让子类 继承父类的变量以及方法 ,并且我们还可以在子类当中指定一些属于自己的特性,并且还可以重写父类的一些方法。一般我们会将不同的类放在不同的文件当中,使用import引入,一样可以实现继承。
我们创建一个蝙蝠类:
我们再创建一个蝙蝠侠的类,同时继承Superhero和Bat:
执行这个类:
我们可以通过yield关键字创建一个生成器,每次我们调用的时候执行到yield关键字处则停止。下次再次调用则还是从yield处开始往下执行:
除了yield之外,我们还可以使用()小括号来生成一个生成器:
关于生成器和迭代器更多的内容,可以查看下面这篇文章:
五分钟带你弄懂迭代器与生成器,夯实代码能力
我们引入functools当中的wraps之后,可以创建一个装饰器。装饰器可以在不修改函数内部代码的前提下,在外面包装一层其他的逻辑:
装饰器之前也有专门的文章详细介绍,可以移步下面的传送门:
一文搞定Python装饰器,看完面试不再慌
不知道有多少小伙伴可以看到结束,原作者的确非常厉害,把Python的基本操作基本上都囊括在里面了。如果都能读懂并且理解的话,那么Python这门语言就算是入门了。
如果你之前就有其他语言的语言基础,我想本文读完应该不用30分钟。当然在30分钟内学会一门语言是不可能的,也不是我所提倡的。但至少通过本文我们可以做到熟悉Python的语法,知道大概有哪些操作,剩下的就要我们亲自去写代码的时候去体会和运用了。
根据我的经验,在学习一门新语言的前期,不停地查阅资料是免不了的。希望本文可以作为你在使用Python时候的查阅文档。
最后,我这里有各种免费的编程类资料,有需要的及时私聊我,回复"学习",分享给大家,正在发放中............