Python学习
因为我之前使用Python复现算法,所以环境早已经进行了配置
要点简介
脚本语言是一种介乎于 HTML 和诸如 JAVA 、 Visual Basic 、 C++ 等编程语言之间的一种特殊的语言,尽管它更接近后者,但它却不具有编程语言复杂、严谨的语法和规则。有一些脚本语言已经发生了变化,如 Python,perl 已经可以编译成中间代码然后执行,这样的脚本语言已经可以被称为编译型脚本语言。
脚本语言的“优势”,其实只在于它不需要事先“编译”。所以 Python 语言不用像 Java 或者 C++ 语言需要首先进行编译,再进行运行,脚本语言可以直接读取文本文件,一边解释一边执行。
Python 是一门独特的脚本语言,快速浏览一下他的要点:
- 面向对象:每一个变量都是一个类,有其自己的属性(attribute)与方法(method)。
- 语法块:用缩进(四个空格)而不是分号、花括号等符号来标记。因此,行首的空格不能随意书写。
- 注释:行内用“#”号,行间注释写在两组连续三单引号之间:’’’
- 续行:行尾输入一个反斜杠加一个空格(’\ ‘),再换行。如果行尾语法明显未完成(比如以逗号结尾),可以直接续行。
- 打印与输入:函数 print() 与 input(),注意 print() 的 sep 与 end 参数。
- 变量:无需指定变量类型,也不需要提前声明变量。
- 删除变量:del()
- 复制变量:直接将变量a赋值给b,有时仅仅复制了一个“引用”。此后 b 与 a 的改动仍会互相影响。必要时使用 a is b 来判断是否同址。
- 模块:通过 import pandas 的方式加载模块(或者 import pandas as pd),并用形如 pandas.DataFrame(或 pd.DataFrame)的方式调用模块内的方法。也可以使用 from pandas import DataFrame 的方式,这样在下文可以直接使用 DataFrame 作为调用名。
- 帮助:配合使用 dir() 与 help() 命令;其中前者是输出变量所有的成员。
基础语法
-
Print 输出
print() 默认输出是换行的,如果要实现不换行需要加上end参数。
x="a"
y="b"
print(x, end=' ')
print(y, end=' ')
-
空格与换行
在 Python 中,为了让代码看起来更清晰,具有更好的可读性,有时会在代码中加入空格和空行。空格或者空行与代码缩进不同,并不是 Python 语法的一部分。书写时不插入空格或者空行,Python 解释器运行也不会出错。但是空格或者空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。空格和空行是为了增加代码可读性。
-
Python 注释
以‘#’开头的语句是注释,不一定要出现在行首,在某些语句后面也可以加注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释,但注意不要使用无意义的注释。
Python 中单行注释采用 # 开头,Python 没有块注释,所以现在推荐的多行注释也是采用的 # 比如:#!/usr/bin/python # First comment print "Hello, Python!"; # second comment
-
多行语句
Python 语句中一般以新行作为为语句的结束符。
但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示:total = item_one + \ item_two + \ item_three
语句中包含[], {} 或 () 括号就不需要使用多行连接符。如下实例:
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
-
Python 引号
Python 接收单引号(‘ ),双引号(“ ),三引号(‘’’ “””) 来表示字符串,引号的开始与结束必须的相同类型的。
其中三引号可以由多行组成,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释。
word = 'word'
sentence = "This is a sentence."
paragraph = """This is a paragraph. It is
made up of multiple lines and sentences."""
-
缩进
任何一种编程语言都有各自的语法和编程规范,Python 之所以以‘优雅,简单’著称,其中一个最重要的原因,就是它的“缩进”。大部分的编程语言都是使用“{}”来表示一个语句块或者代码段,而 Python 用缩进层次来组织代码块,而约定一个缩进是用‘4个空格’来表示,请务必遵守约定俗成的习惯,坚持使用4个空格的缩进。
如果是用文本编辑器或者 IDE,可以把 Tab 自动转换为4个空格,然后用 tab 键来使用缩进,确保不混用 Tab 和空格。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。如下所示:if True: print("neo") else: print("smile")
-
Python 关键字
下面的列表显示了在 Python 中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。
所有Python的关键字只包含小写字母。
and | exec | not |
---|---|---|
assert | finally | or |
break | for | pass |
class | from | |
continue | global | raise |
def | if | return |
del | import | try |
elif | in | while |
else | is | with |
except | lambda | yield |
-
Python 标识符
标识符是电脑语言中允许作为名字的有效字符串集合。其中,有一部分是关键字,构成语言的标识符。这样的标识符是不能做它用的标识符的,否则会引起语法错误(SyntaxError 异常)。合法的 Python 标识符,需要遵守如下规定:
- 第一个字符必须是字母或下划线(_)
- 剩下的字符可以是字母和数字或下划线
- 大小写敏感
- 不能是 Python 的关键字,例如 def、class 就不能作为标识符
以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用
from xxx import *
而导入。
以双下划线开头的_ _foo
代表类的私有成员,以双下划线开头和结尾的_ _foo_ _
代表Python里特殊方法专用的标识,如_ _init_ _()
代表类的构造函数。
Python 可以同一行显示多条语句,方法是用分号 ; 分开,如:
>>> print("hello");print("world");
hello
world
变量
字符串
创建字符串可以使用单引号、双引号、三单引号和三双引号,其中三引号可以多行定义字符串,Python 不支持单字符类型,单字符也在Python也是作为一个字符串使用。
我们定义一个 s='python'语句,它在计算机中的执行顺序是先在内存中创建一个字符串 Python ,在程序栈寄存器中创建一个变量 s,最后把 Python 的地址赋给s 。
再来看看字符串的一些常见操作:
s = '学习Python'
# 切片
s[0], s[-1], s[3:], s[::-1] # '学', 'n', 'ython', 'nohtyP的习学'
# 替换,还可以使用正则表达式替换
s.replace('Python', 'Java') # '学习Java'
# 查找,find()、index()、rfind()、rindex()
s.find('P') # 3, 返回第一次出现的子串的下标
s.find('h', 2) # 6, 设定下标2开始查找
s.find('23333') # -1, 查找不到返回-1
s.index('y') # 4, 返回第一次出现的子串的下标
s.index('P') # 不同与find(), 查找不到会抛出异常
# 转大小写
upper()
lower()
swapcase()
capitalize()
istitle()
isupper()
islower()
s.upper() # '学习PYTHON'
s.swapcase() # '学习pYTHON', 大小写互换
s.istitle() # True
s.islower() # False
# 去空格
strip()
lstrip()
rstrip()
# 格式化
s1 = '%s %s' % ('Windrivder', 21) # 'Windrivder 21'
s2 = '{}, {}'.format(21, 'Windridver') # 推荐使用format格式化字符串
s3 = '{0}, {1}, {0}'.format('Windrivder', 21)
s4 = '{name}: {age}'.format(age=21, name='Windrivder')
# 连接与分割,使用 + 连接字符串,每次操作会重新计算、开辟、释放内存,效率很低,所以推荐使用join
l = ['2017', '03', '29', '22:00']
s5 = '-'.join(l) # '2017-03-29-22:00'
s6 = s5.split('-') # ['2017', '03', '29', '22:00']
以上是一些常见的操作。
另外还有一点需要注意的是字符串编码,所有的 Python 字符串都是 Unicode 字符串,当需要将文件保存到外设或进行网络传输时,就要进行编码转换,将字符转换为字节,以提高效率。
# encode 将字符转换为字节
str = '学习Python'
print (str.encode()) # 默认编码是 UTF-8 输出:b'\xe5\xad\xa6\xe4\xb9\xa0Python'
print (str.encode('gbk')) # 输出 b'\xd1\xa7\xcf\xb0Python'
# decode 将字节转换为字符
print (str.encode().decode('utf8')) # 输出 '学习Python'
print (str.encode('gbk').decode('gbk')) # 输出 '学习Python'
List(列表)
列表是写在方括号 [] 之间、用逗号分隔开的元素列表,列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套),列表中的元素是可以改变。
示例:
Weekday = ['Monday','Tuesday','Wednesday','Thursday','Friday']
print(Weekday[0]) # 输出 Monday
#list 搜索
print(Weekday.index("Wednesday"))
#list 增加元素
Weekday.append("new")
print(Weekday)
# list 删除
Weekday.remove("Thursday")
print(Weekday)
Tuple(元组
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开,组中的元素类型也可以不相同。
示例:
letters = ('a','b','c','d','e','f','g')
print(letters[0]) # 输出 'a'
print(letters[0:3]) # 输出一组 ('a', 'b', 'c')
Sets(集合)
集合(set)是一个无序不重复元素的序列,使用大括号 {} 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 {} ,因为 {} 是用来创建一个空字典。
集合不能被切片也不能被索引,除了做集合运算之外,集合元素可以被添加还有删除:
示例:
a_set = {1,2,3,4}
# 添加
a_set.add(5)
print(a_set) # 输出{1, 2, 3, 4, 5}
# 删除
a_set.discard(5)
print(a_set) # 输出{1, 2, 3, 4}
Dictionary(字典)
字典是一种映射类型,它的元素是键值对,字典的关键字必须为不可变类型,且不能重复。创建空字典使用 {} 。
Logo_code = {
'BIDU':'Baidu',
'SINA':'Sina',
'YOKU':'Youku'
}
print(Logo_code)
# 输出{'BIDU': 'Baidu', 'YOKU': 'Youku', 'SINA': 'Sina'}
print (Logo_code['SINA']) # 输出键为 'one' 的值
print (Logo_code.keys()) # 输出所有键
print (Logo_code.values()) # 输出所有值
print (len(Logo_code)) # 输出字段长度
Python流程控制
if 语句
if 语句表示如何发生什么样的条件,执行什么样的逻辑。
语法:
# x = int(input("Please enter an integer: "))
x = -5
if x < 0:
x = 0
print('Negative changed to zero')
elif x == 0:
print('Zero')
elif x == 1:
print('Single')
else:
print('More')
for 循环
Python for 循环可以遍历任何序列的项目,如一个 列表 或者一个 字符串。
'''
for 后跟变量名,in 后跟序列,注意加冒号
for 循环每次从序列中取一个值放到变量中
此处的序列主要指 列表 元组 字符串 文件
'''
for iterating_var in sequence:
对于按顺序iterating_var:
statements(s)
eg:
for letter in 'Python': # 第一个实例
print('当前字母 :', letter)
fruits = ['banana', 'apple', 'mango']
for fruit in fruits: # 第二个实例
print('当前字母 :', fruit)
print("Good bye!")
# 也可以通过索引地址来遍历内容
fruits = ['banana', 'apple', 'mango']
for index in range(len(fruits)):
print('当前水果 :', fruits[index])
print("Good bye!")
while 循环
Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:
count = 0
while (count < 9):
print( 'The count is:', count)
count = count + 1
print("Good bye!")
#也可以在 while 循环中添加判断逻辑
count = 0
while count < 5:
print(count, " is less than 6")
count = count + 1
else:
print(count, " is not less than 6")
range() 函数
如果你需要一个数值序列,内置函数 range() 会很方便,它生成一个等差级数链表:
range (start, end, scan):
参数含义:
start:计数从 start 开始。默认是从 0 开始。例如 range(5) 等价于 range(0, 5);
end:计数到 end 结束,但不包括 end.例如:range(0, 5) 是[0, 1, 2, 3, 4]没有 5
scan:每次跳跃的间距,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
示例:
for i in range(6):
print(i)
print(range(6),'finish')
for i in range(6,10):
print(i)
print(range(6,10),'finish')
for i in range(6,12,2):
print(i)
print(range(6,12,2),'finish')
#需要迭代链表索引的话,如下所示结合使 用 range() 和 len():
a = ['i', 'love', 'coding', 'and', 'free']
for i in range(len(a)):
print(i, a[i])
break 用法
break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
示例:
for letter in 'ityouknow': # 第一个实例
if letter == 'n': # 字母为 n 时中断
break
print ('当前字母 :', letter)
continue 用法
continue 语句被用来跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
for letter in 'ityouknow': # 第一个实例
if letter == 'n': # 字母为 n 时跳过输出
continue
print ('当前字母 :', letter)
pass 语句
Python pass 是空语句,是为了保持程序结构的完整性。它用于那些语法上必须要有什么语句,但程序什么也不做的场合.
示例:
while True:
pass # Busy-wait for keyboard interrupt (Ctrl+C)
# 这通常用于创建最小结构的类:
class MyEmptyClass:
pass