Python的优点与缺点
优点
- 除了内置库外,还有大量第三方库
- 优雅,明确,语法简单,可读性强
缺点
- 运行速度较慢(但由于网络更慢,可忽略)
- 代码不能加密,发布编写的Python程序,实际上就是发布源代码(C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去)
Python与其他语言的比较
- Python 为可读性设计,与英语有一些相似之处,并受数学的影响。
- Python 使用新行来完成命令,而不像通常使用分号或括号的其他编程语言。
- 依赖缩进,使用空格来定义范围;例如循环、函数和类的范围。其他编程语言通常使用花括号来实现此目的。
运行
命令行模式
可打开.py文件运行,文本编辑时代码需完整,或直接运行python代码。
Python交互模式
Python交互式环境会把每一行Python代码的结果自动打印出来(如100+200运行结果是300,不需要print()),但是,直接运行Python代码却不会。
直接运行py文件
在Windows上不行,但在Mac和Linux上是可以的,方法是在.py文件的第一行加上一个特殊的注释:#!/usr/bin/env python3
然后,通过命令给hello.py以执行权限: $ chmod a+x hello.py
注释
#This is a comment
#written in
#more than just one line
print("Hello, World!")
"""
This is a comment
written in
more than just one line
"""
print("Hello, World!")
语法
输入&输出
输出
print()函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出
print()会依次打印每个字符串,遇到逗号“,”会输出一个空格
如需结合文本和变量,Python 使用 + 字符:
示例
x = "awesome"
print("Python is " + x)
对于数字,+ 字符用作数学运算符
输入
name = input('please enter your name: ')
print('hello,', name)
程序一运行,会首先打印出please enter your name,这样,用户就可以根据提示,输入名字后,得到hello, xxx的输出
缩进
必须在同一代码块中使用相同数量的空格,否则 Python 会出错。
数据类型
整数
| 进制 | 前缀 |
|---|---|
| 2进制 | 0b(binary) |
| 8进制 | 0o(octal) |
| 10进制 | 无(Decimal) |
| 16进制 | 0x(Hexadecimal) |
进制之间的相互转化:
bin() 转2进制
oct() 转8进制
int() 转10进制
hex() 转16进制
浮点数(小数)
对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法也是精确的),而浮点数运算则可能会有四舍五入的误差。
复数
用 "j" 作为虚部编写,如:x = 2+3j
类型转换
可以使用 int()、float() 和 complex() 方法从一种类型转换为另一种类型
随机数
Python 有一个名为 random 的内置模块,可用于生成随机数
示例:
import random
print(random.randrange(1,10))
字符串
字符串是以单引号 ' 或双引号 " 括起来的任意文本, 注意,' '或" "本身只是一种表示方式,不是字符串的一部分,如果'本身也是一个字符,可以用""括起来
如果字符串内部既包含'又包含", 可以用转义字符\来标识,比如:
'I\'m \"OK\"!'
表示的字符串内容是:I'm "OK"!
转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\
如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r' '表示' '内部的字符串默认不转义
示例:
>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\
如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用''' '''的格式表示多行内容(注意在输入多行内容时,提示符由>>>变为...,提示你可以接着上一行输入,注意...是提示符,不是代码的一部分),多行字符串''' '''还可以在前面加上r使用,表示''' '''内部的字符串默认不转义
示例:
>>> print('''line1
... line2
... line3''')
line1
line2
line3
布尔值
一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),布尔值可以用and、or和not运算。
大多数值都为 True
如果有某种内容,则几乎所有值都将评估为 True。
除空字符串外,任何字符串均为 True。
除 0 外,任何数字均为 True。
除空列表外,任何列表、元组、集合和字典均为 True。
某些值为 False
实际上,除空值(例如 ()、[]、{}、""、数字 0 和值 None)外,没有多少值会被评估为 False。
空值
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
变量
变量名称
-
变量名必须以字母或下划线字符开头,不能以数字开头
-
变量名只能包含字母数字字符和下划线(A-z、0-9 和 _)
-
变量名称区分大小写(age、Age 和 AGE 是三个不同的变量)
赋值
等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言(如c语言,Java)
Python 允许在一行中为多个变量赋值,还可以在一行中为多个变量分配相同的值
如果尝试组合字符串和数字,Python 会给出错误
要在函数内部更改全局变量的值,使用 global 关键字引用该变量
示例:
x = "awesome"
def myfunc():
global x
x = "fantastic"
myfunc()
print("Python is " + x)
运行结果为Python is fantastic
常量
在Python中,通常用全部大写的变量名表示常量:PI = 3.14159265359
除法:
在Python中,有两种除法,一种除法/,计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数(9/3=3.0)
还有一种除法是//,称为地板除,两个整数的除法仍然是整数(取整数部分)
字符串
- 于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:
示例:
>>> ord('中')
20013
>>> chr(66)
'B'
- 字符串是数组
方括号可用于访问字符串的元素。
示例:获取位置 1 处的字符(请记住第一个字符的位置为 0)
a = "Hello, World!"
print(a[1])
输出为e
- 裁切 指定开始索引和结束索引,以冒号分隔,以返回字符串的一部分。
示例: 获取从位置 2 到位置 5(不包括)的字符:
b = "Hello, World!"
print(b[2:5])
输出为llo
- 负的索引
示例:获取从位置 5 到位置 2(不包括) 的字符,从字符串末尾开始计数
b = "Hello, World!"
print(b[-5:-2])
输出为orl
- 其他字符串操作
len() 函数返回字符串的长度
a = "Hello, World!"
print(len(a))
strip() 方法删除开头和结尾的空白字符
a = " Hello, World! "
print(a.strip()) # returns "Hello, World!"
lower() 返回小写的字符串
a = "Hello, World!"
print(a.lower())
upper() 方法返回大写的字符串
a = "Hello, World!"
print(a.upper())
replace() 用另一段字符串来替换字符串
a = "Hello, World!"
print(a.replace("World", "Kitty"))
split() 方法在找到分隔符的实例时将字符串拆分为子字符串
a = "Hello, World!"
print(a.split(",")) # returns ['Hello', ' World!']
如需检查字符串中是否存在特定短语或字符,我们可以使用 in 或 not in 关键字
txt = "China is a great country"
x = "ina" in txt
print(x)
#return True
字符串级联(串联),使用 + 运算符
a = "Hello"
b = "World"
c = a + " " + b
print(c)
输出为Hello World
注意:不能用+运算符组合字符串和数字,但是可以使用 format() 方法组合字符串和数字。
age = 18
txt = "My name is Bill, and I am {}"
print(txt.format(age))
format() 方法接受不限数量的参数,并放在各自的占位符中
quantity = 3
itemno = 567
price = 49.95
myorder = "I want {} pieces of item {} for {} dollars."
print(myorder.format(quantity, itemno, price))
可以使用索引号 {0} 来确保参数被放在正确的占位符中
quantity = 5
itemno = 789
price = 24.36
myorder = "I want to pay {2} dollars for {0} pieces of item {1}."
print(myorder.format(quantity, itemno, price))
运算符
比较特殊的算术运算符
| 名称 | 符号 |
|---|---|
| 幂 | ** |
| 取模 | % |
| 地板除 | // |
| 对一个二进制数按位取反 | ~ |
比较特殊的赋值运算符(负数按补码形式参加按位或运算)
| 符号 | 作用 |
|---|---|
| &= | 按位与赋值 |
| = | 按位或赋值 |
| ^= | 按位异或赋值 |
| <<= | 左移赋值(右边补零) |
| >>= | 右移赋值(正数左补0,负数左补1) |
逻辑运算符
| 符号 | 描述 |
|---|---|
| and | 如果两个语句都为真,则返回 True |
| or | 如果其中一个语句为真,则返回 True |
| not | 反转结果,如果结果为 true,则返回 False |
身份运算符
| 符号 | 描述 |
|---|---|
| is | 如果两个变量是同一个对象,则返回 true |
| is not | 如果两个变量不是同一个对象,则返回 true |
成员运算符
| 符号 | 描述 |
|---|---|
| in | 如果对象中存在具有指定值的序列,则返回 True |
| not in | 如果对象中不存在具有指定值的序列,则返回 True |
列表
有序和可更改的集合。允许重复的成员。用方括号[]编写。
可以通过引用索引号来访问列表项,如thislist[1](正索引从0开始,复索引从-1开始)
如需确定列表中有多少项,使用 len() 。
如需将项目添加到列表的末尾,请使用 append() 方法:
thislist = ["apple", "banana", "cherry"]
thislist.append("orange")
print(thislist)
元组
有序且不可更改的集合。允许重复的成员。用括号编写。
如需创建仅包含一个项目的元组,必须在该项目后添加一个逗号,否则 Python 无法将变量识别为元组。 示例;
thistuple = ("apple",)
print(type(thistuple))
#不是元组
thistuple = ("apple")
print(type(thistuple))
输出为tuple和str。
- del 关键字可以完全删除元组
- 使用 tuple() 方法来创建元组:
thistuple = tuple(("apple", "banana", "cherry")) # 请注意双括号
print(thistuple)
集合
集合是无序和无索引的集合。在 Python 中,集合用花括号编写。
无法通过引用索引来访问 set 中的项目,因为 set 是无序的,项目没有索引。
但是可以使用 for 循环遍历 set 项目,或者使用 in 关键字查询集合中是否存在指定值。
集合一旦创建,您就无法更改项目,但是您可以添加新项目。
要将一个项添加到集合,使用 add() 。
要向集合中添加多个项目,使用 update() 。
thisset = {"apple", "banana", "cherry"}
thisset.update(["orange", "mango", "grapes"])
print(thisset)
要删除集合中的项目,使用 remove() 或 discard() 。
还可以使用 pop() 删除项目,但此方法将删除最后一项。记住set 是无序的,因此您不会知道被删除的是什么项目。
字典
字典是一个无序、可变和有索引的集合。在 Python 中,字典用花括号编写,拥有键和值。
可以通过在方括号内引用其键名来访问字典的项目,获取 "model" 键的值:
x = thisdict["model"]
输出为911