python
即可查看安装信息import sys
print (sys.version)
注意: Python3 和Python2的输出语法不一样,一个要括号,一个不要括号
{
"cmd": ["******","-u","$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
}
其中
******
填入你的python安装目录路径,比如”D:/Python36/python3.exe”,注意路径中的斜杠方向
title()
将每个单词的首字母改为大写upper()
将字符串全部改为大写lower()
将字符串全部改为小写+
号用来拼接\t
,换行符\n
str()
将非字符串值表示为字符串,如str("23")
将整型23变成字符串strip()
返回字符串去掉左右两边指定字符或者空格(未指定字符时)的副本;同理还有lstrip()
和rstrip()
去掉左边和右边的指定字符。+ - * /
表示加减乘除运算
注意python3中
3/2
输出结果1.5
,但是在python2中输出为1
两个乘号**
表示乘方
题外话:使用
import this
可以查看编写python代码的指导原则(python之禅)。不要企图编写完美无缺的代码;先编写行之有效的代码,再决定是对其做进一步的改善还是转而去编写新代码。
[ ]
表示列表,用逗号分隔。.append(value)
向列表末尾添加元素value.insert(index,value)
向列表中索引index的地方插入元素value已知元素索引
del
删除元素。如del motos[1]
删除了列表motos中的第二个元素.pop(index)
来弹出元素。弹出指定index位置的元素,若未指定index则弹出列表末尾元素已知元素值
.remove(value)
来删除第一个值为指定的value的元素.sort()
方法对列表永久性排序;通过.sort(reverse=True)
进行逆序排序sorted(list)
方法对list列表进行临时排序。比如sorted(cars)就是对cars进行临时排序。.reverse()
方法反转列表中元素的排列顺序len(list)
方法获取list列表的长度for item in items:
进行遍历 注意冒号和代码缩进
list(range(1,6))
生成列表[1,2,3,4,5]
;使用list(range(2,11,2))
生成列表[2,4,6,8,10]
digits=[1,2,3,4,5,6,7,8,9,0]
使用min(digits)
、max(digits)
、sum(digits)
找出列表的最小值、最大值和总和。squares=[value**2 for value in range(1,5)]
来生成列表squares=[1,4,9,16]
digits[from:to]
返回digits列表从索引from到to的一个切片。to为空表示到列表末尾,为-1表示到最后一个元素为止。from也是如此。使用list_copy=list[:]
来复制一个列表
注意:
list_copy=list
会让list_copy和list指向同一个列表
不可变的列表称为元组tuple,其元素值不可改变。元组用法和列表类似,但是元组使用圆括号而不是方括号来标识。
=
是赋值,两个等号==
是条件判断“相等?”,!=
表示“不相等?”and
必须全部为真则为真;or
至少一个为真则为真in
;检查特定值是否不包含在列表中用not in
if-elif-else
结构,更常用if-elif-elif
if list:
来判断list是否为空{"key1":"value1","key2":"value2"}
存储键值对信息。
注意:python不关心键值对的添加顺序,只关心键和值的关联关系
使用del dic_name["key"]
删除键值对
for key,value in dic.items():
来遍历字典使用for key in dic.keys():
来遍历字典中的所有键
注意:遍历字典时,会默认遍历所有的键。因此将代码
for key in dic.keys():
替换成for key in dic:
结果是一样的
使用for value in dic.values()
可以遍历字典中所有的值
可以嵌套使用
sorted()
来临时排序,使用set()
来过滤重复值
在字典中嵌套列表,在字典中嵌套字典,在列表中嵌套字典
代码message=input("Please enter: ")
给出输入提示,并将输入存放在message中
注意:python将用户输入作为字符串存入。在需要时可以用
int()
将其转换成数字
区别:python2中使用raw_input()
作为输入(和python3中的input()
功能一样),python2中也包含input()
函数,但其将用户输入解读为python代码
关键字break
、continue
,还有while循环条件,标志的运用
while 'cat' in pets:
pets.remove('cat')
def function_name(args):
"""文档字符串docstring的注释,用三引号括起,描述函数的功能"""
print ("Hello")
def person(name,age):
print (name+" is "+age)
person("xgx","23")
def person(name,age):
print (name+" is "+age)
person(age="23",name="xgx")
def person(name,age="23"):
print (name+" is "+age)
person("xgx")
def make_pizza(*toppings):
"""打印顾客点的所有配料"""
print (toppings)
def build_profile(first, last, **user_info):
"""创建一个字典,其中包含我们知道的有关用户的一切"""
profile = {}
profile['first_name'] = first
profile['last_name'] = last
for key,value in user_info.items():
profile[key] = value
return profile
user_profile = build_profile('albert','einstein',location='princetion',field='physics')
print (user_profile)
# output: {'first_name': 'albert', 'last_name': 'einstein', 'location': 'princetion', 'field': 'physics'}
import module_name
moudle_name.function_name()
from module_name import function_name
from module_name import function_0, function_1, function_2
from module_name import function_name as fn
import module_name as mn
from module_name import *
注意:由于导入了每个函数,可通过名称来调用每个函数,而无需使用句点表示法。然而python可能遇到多个重名的函数或者变量,进而覆盖函数。所以推荐做法是要么只导入你需要的函数,要么导入整个模块并使用句点表示法。
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
"""返回整洁的描述信息"""
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
my_car = Car('audi', 'a4', 2016)
print(my_car.get_descriptive_name())
__init__()
方法,每次实例化类时都会运行此方法。此方法必须包含形参self
,它是一个指向实例本身的引用。
在python2中创建类需要在定义类时括号中包含单词object,如
class Car(object):
class ElectricCar(Car):
"""电动汽车的独特之处"""
def __init__(self, make, model, year):
"""初始化父类的属性,再初始化电动汽车特有的属性"""
super().__init__(make, model, year)
self.battery_size = 70
class Car(object):
def __init__(self, make, model, year):
# snip
class ElectricCar(Car):
def __init__(self, make, model, year):
super(ElectricCar, self).__init__(make, model, year)
# snip
class Car():
# snip
class Battery():
"""一次模拟电动汽车电瓶的简单尝试"""
def __init__(self, battery_size=70):
"""初始化电瓶的属性"""
self.battery_size = battery_size
def describe_battery(self):
"""打印一条描述电瓶容量的消息"""
print("this car has a " + str(self.battery_size) + "-KWH battery.")
class ElectricCar(Car):
"""电动汽车的独特之处"""
def __init__(self, make, model, year):
"""初始化父类的属性,再初始化电动汽车特有的属性"""
super().__init__(make, model, year)
self.battery = Battery()
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
from module_name import class_name
from module_name import class_0, class_1
module_name.class_name
语法import module_name
from module_name import *
from collections import OrderedDict
my_dic = OrderedDict()
with open("pi.txt") as file_object:
contents = file_object.read()
print(contents)
with关键字在不再需要访问文件后将其关闭
file_path = '/home/gabear/other_files/text_files/filename.txt'
with open(file_path) as file_object:
\
。由于反斜杠在python中被视为转义标记,为在Windows中确保万无一失,应以原始字符串的方式指定路径,即在开头的单引号前加上r
。Windows系统中示例如下:file_path = r'C:\Users\gabear\other_files\text_files\filename.txt'
with open(file_path) as file_object:
推荐将数据文件存储在程序文件所在的目录,然后使用相对路径访问
filename = 'pi.txt'
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())
在文件中,每行的末尾都有一个换行符,而print语句也会加上一个换行符,因此打印出来结果每行末尾都有两个换行符。可用
rstrip()
去除空行。
filename = 'pi.txt'
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
注意:读取文本文件时,Python将其中的所有文本都解读为字符串。若读取并使用数值,需要使用
int()
或float()
将其转换成整数或浮点数。
filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write('I love reading.\n')
file_object.write('I love programming.\n')
open()
的第二个实参可以是读取模式'r'
、写入模式'w'
、附加模式'a'
或者能够读取和写入文件的模式'r+'
。如果省略了模式参数,Python将以默认的只读模式打开文件。'w'
打开文件时若文件已存在,Python将在返回文件对象前清空该文件。def count_words(filename):
"""计算一个文件大致包含多少个单词"""
try:
with open(filename) as file_object:
contents = file_object.read()
except FileNotFoundError:
print("Sorry, the file " + filename + " does not exist.")
else:
# 计算文件大致包含多少个单词
words = contents.split()
num_words = len(words)
print("The file " + filename + " has about " + str(num_words) + " words.")
filename = 'programming.txt'
count_words(filename)
方法
split()
以空格为分隔符将字符串分拆成多个部分,并存储到列表中。
try-except-else
的工作原理大致如下:Python尝试执行try代码块中的代码,只有可能引发异常的代码才需要放在try语句中;依赖于try代码块成功执行的代码都应放在else代码块中;except代码块告诉Python,如果它尝试运行try代码块中的代码时引发了指定的异常,该怎么办。try:
# code
except ZeroDivisionError as e:
raise e
else:
pass
json.dump()
和json.load()
。函数json.dump()接收两个实参:要存储的数据以及可用于存储数据的文件对象。# number_writer.py
# json.dump()存储数据
import json
numbers = [2, 3, 5, 7, 11]
filename = 'numbers.json'
with open(filename, 'w') as f_obj:
json.dump(numbers, f_obj)
# number_reader.py
# json.load()读取数据
import json
filename = 'numbers.json'
with open(filename) as f_obj:
numbers = json.load(f_obj)
print(numbers)
# name_function.py
def get_formatted_name(first, last, middle=''):
"""生成整洁的姓名"""
if middle:
full_name = first + ' ' + middle + ' ' + last
else:
full_name = first + ' ' + last
return full_name.title()
# test_name_function.py
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
"""测试name_function.py"""
def test_first_last_name(self):
"""能够正确地处理像gao xiong这样的名字吗?"""
formatted_name = get_formatted_name('gao', 'xiong')
self.assertEqual(formatted_name, 'Gao Xiong')
def test_first_last_middle_name(self):
"""能够正确地处理像xiong gao xiong这样的名字吗?"""
formatted_name = get_formatted_name('xiong', 'xiong', 'gao')
self.assertEqual(formatted_name, 'Xiong Gao Xiong')
unittest.main()
- 首先必须导入模块
unittest
和要测试的函数;- 然后创建继承
unittest.TestCase
的类,你可以随便给这个类命名,但最好让它看起来与要测试的函数有关,并包含Test字样;- 在类中编写测试方法,测试方法名必须以
test_
打头,这样Python才会自动运行;- 最后注意
.assertEqual()
断言方法的使用。
unittest.TestCase
类中提供了很多断言方法。下表描述了6个常用的断言方法。方法 | 用途 |
---|---|
assertEqual(a, b) | 核实 a == b |
assertNotEqual(a, b) | 核实 a != b |
assertTrue(x) | 核实 x 为 True |
assertFalse(x) | 核实 x 为 False |
assertIn(item, list) | 核实 item 在 list 中 |
assertNotIn(item, list) | 核实 item 不在 list 中 |
在unittest.TestCase()
类中包含了setUp()
方法,Python将先运行它,再运行各个以test_
打头的方法。这样,测试类下面的每个测试方法都可以使用在方法setUp()中创建的对象了。这个方法很实用。
运行测试用例时,每完成一个单元测试,Python都打印一个字符:测试通过时打印一个句点;测试引发错误时打印一个E;测试导致断言失败时打印一个F。
参考书籍:《Python编程从入门到实践》,【美】Eric Matthes 著,人名邮电出版社