Pycharm使用方法:
Debug: 开始Debug:shift+F9
Debug到下一个断点:F9或F8
停止:Ctrl+F2
查看调试时的变量信息看下方信息栏的Debugger;查看输出看Console
Python编程:从入门到实践
python对于一个变量名并不作固定的数据类型绑定,当存入数据形式为字符串时,它就是一个字符串,当存入一个int时,它就是一
int,而再放入一个字符串/列表/集合时,它又变成了一个字符串
Python中的变量(包括字符串)拷贝存储方式与c相同,但直接在列表,元组,字典间赋值时要注意了,默认为浅拷贝
通用函数:
list(?) 转化为一个列表
str(int num) 返回值为和num相同的字符串
sorted(iterable) 对iterable列表排序,但对原列表不作任何改变,会返回排序后的列表
len(iterable) 获取iterable列表的长度,返回值即为其长度
max/min(iterable) 返回列表中元素的最大值/最小值
sum(iterable) 返回列表中元素的值的总和
set(list) 将列表转化为集合
raw_input('str') 先输出str作提示信息,再进行输入操作,返回值为输入内容所表示的字符串
int('str') 将str所表示的内容转换成int类型的数据
Python 笔记
1.
1.2
1.2
字符串的加法,减法
1.2.3
字符串的切片(str[0:3])(str[-3:-1])
1.2.4
字符串高级方法(类似字符串对象内的函数)
标题大写: .title() str.title() 将每个空白字符的后面的字符换成大写
大小写: .upper(),.lower() 全部切换成大写或小写
切割\分离: .spilt() str.spilt('分隔符') 返回值是一个一维字符串的列表,字符数组的行数取决于字符串被分拆成了几段;
分隔符可以是单个字符,也可以是一个字符串
替换: .replace() str.spilt('str_before','str_after') 返回值为以为字符数组
去两端空字符: .strip() str1.strip('str2') 返回值为字符串,其中会除去str1中所有str2含有的字符,如果不加参数str2,
则自动去除str2两边的空格字符
.lstrip()/.rstrip() str1.lstrip/strip('str1') 返回值也为字符串,和上面基本相同,但只会去掉开头的/末尾的
查找: (str1 in str2/iterable2) 返回值为一个布尔值,常用在选择结构中
.formate() str1.formate('str2') 将str1中的所有{ }替换为str2,返回值为替换后的字符串
list1=list2 则将list2的地址赋予list1,只进行浅拷贝
list1=list[:] 则新生成一个列表,进行深拷贝
//////////
随机讲的野生函数
print() 类似c++中的cout<<,可以直接输出字符串(不管几维)和数字,后面自动接了一个换行符
range(a,b) 表示从a到b的list(官方语言为集合),从a开始小于b
len(list1) 返回list1的长度
zip(list1,list2...) 提供list1和list2中元素的一对一映射集合,放在另一个地方,返回值为其地址,若对所得
地址再用一次zip,则返回n个值,分别是之前的各个list;
//////////
1.3结构
1.3.1
1. 函数,注意print会(返回并[可能错了])输出,而return 只会返回;并且,print并不是函数的终点,只有return才是函数的终点
定义格式:
def function_name(parameter):
'''something to describe the function'''
function_content
return something
2. Python传参也可以使用默认参数(这里叫参数默认值),不过仍然要把有默认参数的放在最后面.
Python传参方式默认方式: 对变量(包括字符串)默认是值传递,对列表之类的默认是地址传值(也算是值传递)
3.传递任意数量的实参:
传一个元组:多个单参数
def function(*parameter):
'''这样定义参数列表后,函数会将任意数量的参数装入一个元组,该元组的名字就是形参的名字)'''
'''若这种方法和单个数的形参一起使用,应该将任意数量的放后面,这样Python会先匹配单参数'''
'''如果和带默认值的参数混用,python会先填满带默认值的参数'''
balabala
return something
传一个字典:多个键-值对:
def function(**parameter):
'''调用方式:示例:function(key1=value1,key2=value2,key3=value2)'''
'''会生成一个字典,填满'''
balabala
return
4. python传参新方式:
关键词传参:
例:在函数中定义的形参列表为:(animal_name,animal_type);调用参数时,可以将实参列表写为(animal_type=
hamster,animal_name=niko);python 会自动匹配好参数。
5. import关键字
Python中的import机制:
import语句:
方式1: [from \\\filename] import function_name1 [as new_function_name],function_name2(这样就
能值引入某个文件中的某个特定函数)
说明: 1.[]表示是可选的,如果不加,就代表从当前目录引入头文件
2.from后面,一个点代表上一层目录,几个点代表几层,因此还有2层,3层....
3.当然还可以继续加具体的路径值,如:..\ProgramData\Microsoft\Windows\Start Menu
4.as就是作为的意思,那么在这个文件中使用as的名字时,就用了它原来的名字的函数
5.可以写成[from \\\filename] import *,导入该文件中的所有函数
方式2: [from \\\filename的父文件夹] import filename1 [as new_filename1],filename2
1.1.[]表示是可选的,如果不加,就代表从当前目录引入头文件
2.from后面,一个点代表上一层目录,几个点代表几层,因此还有2层,3层....
3.当然还可以继续加具体的路径值,如:..\ProgramData\Microsoft\Windows\Start Menu
4.as就是作为的意思,那么在这个文件中使用as的名字时,就用了它原来的名字的文件
import对类的导入:与上述相同,把函数名改成类名
import之后的使用:
如果是filename里的function函数,则用filename.function(参数列表)调用
6.Python之禅之函数
应在定义每个函数之后写好关于这个函数的注释
如果参数太多,勇敢地换行
除开头写了注释外,import都尽量写开头 if flag:
balabala
[else:
balabala]
and相当于&& or相当于||
新逻辑运算符: in和not in
(item in iterable)相当于[在iterable中存在/找得到item]
布尔数据类型:定义变量时赋值True或false即可
1.3.3
for item in iterable:
do
item在iterable中一次变换,执行do
例如 for i in range(0,10)
print(i)
就是输出0~10
关键字 continue 和 break
可以直接用iterable名的值表示其是否为空545
1.4
1.4.1列表
乘方运算符**
列表:names=['a','b','c','d','e'];
追加函数: names.append(str) 相当与names.pushback(),在尾部增加一个字符串
插入函数: names.insert(n,element) 在names[n-1]和names[n]之间插入element
删除函数: names.pop(n) 除去names[n],如果没有指定n,则除去最后一个元素;
返回值为弹出的元素
names.remove(element) 找出names中第一个完全和element相同的元素,将其除去(是否还有相同的就不管
了);无返回值
del||||这是一个关键字||||| names[n]
拼接函数: names.extend(list2) 在names的后面接上list2的所有元素
清空: names.clear()
排序: names.sort() 字典序排序,会改变names列表的顺序
names.sort(reverse=True) 字典序倒序排序
反转: names.reverse() 将原列表反转
查找函数: names.index(element) 找出names中第一次出现的和element相同的元素的下标
统计次数: names.count()
列表解析: squares = [value**2 for value in range(1,11)]
多重循环: python: for i,j in zip(list1,list2)
c++ : for(int item1=list1[0],item2=list2[0],i=0;
i<list1.length()&&i<list2.length();
i++,item1=list[i],item2=list[i])
高级应用:urls=['balbala{}'.format(number) for number in range(1,16)]
可见for item in list 不止能用在循环结构语句中,对与所有需要列举的地方,都可以使用,非常灵活.
1.4.2 字典
字典就是map,基本使用方式和map一样,不同的是,不需要模板,因此键与值的类型没必要统一
创建方法
map={'one'=1,'two'=2,'three'=3}
map={'one':1,'two':2,'three':3}
使用方法
if key in map.keys: #这里的条件语句是为了避免key不在map里,不然,就会报错
print map[key]
print "three is %(three)s." %d
使用:map.get(key) 如果key不存在,则返回none,否则,返回其对应值
map[key]
删除:map.pop(key)
遍历:for key,value in map.items():
for key in map.keys():
for value in map.values():
1.4.3 元组和集合--通过《Python编程:从入门到实践》学习
1.4.3.1 元组(虚拟)
元组整体性的list,基本特性和list一样。区别是:不能对其内部元素进行任何修改,但仍可访问内部元素,要修
改只能进行整体修改(也就是赋值,重新定义),list对象的函数对元组(dimension)对象基本可用(除了是修改元
素的)
定义方法: dimensions=(200,50)
1.4.3.2 集合(set)
集合类似不允许重复的list
1.4.4 混合嵌套
注意:python的各种东西经常都是浅拷贝,包括嵌套的时候,要熟悉copy.deepcopy()的用法
1.5
1.5.1 打开文件
open(name,mode,buffering) name示例,
Python编程第9章:类(面向对象)
格式:
class class_name(继承的类(这里用f表示父类)):
'''注释'''
def function():
return something
Python 的类中没有数据成员,如果需要,就在写的__init__函数中新定义名称
Python 的类定义中每次都需要用self表示成员函数要引用的对象名
在定义该类时可以用方法super.表示对父类的引用,用super.function1相当于调用了f的function1
猜想:可能调用父类的函数直接调用即可
[super(f,self).__init__()]
如果需要去除掉父类中不需要的方法,只用在子类中对该方法重写,名称完全相同即可
不要忘记了类可以包含(不是说什么继承机制),电动车类里可以含有一个电池的类,并且这个类可以直接用一个语句来实例化(
self.battery=Battery()
写代码的另一境界:从显示的逻辑层面考虑问题;考虑的不是Python而是显示情况是怎样的逻辑模型,怎样用代码来表示它
Python的高级模板:
1.有序字典(只是给加入的键值(按加入顺序)编了一个序号,在遍历时按该顺序遍历)
文件: collections.py
函数名:OrderedDict
定义方法:m=OrderedDict()
说明:创建了一个空的有序字典m,遍历的时候先进先出
2.随机数
文件: random.py
函数名:randint
使用:num=randint(a,b)
说明:产生从a到b的(伪)随机数,闭区间
驼峰命名法:
类名首字母大写,实例(对象)名小写,单词间大写区分
模块名小写,单词间下划线
每个类,要一个说明字符串;每个文档,说明字符串;
一个空行分隔类的方法,两个空行分隔类;
先导入标准模板,再导入自定义模板,中间用空行隔开;o'k
Python编程第10章:
10.1读取文件
格式1:with open(filename1) [as name1]
balabala
格式2:open (filename2) [as name1]
balba
close(filename2)
区别:前面的一种会自ko动找到合适的时机关闭文件,后者要手动调用close()函数
补充:
对于filename中转义字符'\'的冲突,有两种解决方案
1:在单引号或者双引号的前面加上r,表示'\'表示的时该字符,而不是转义
2.像C\C++一样 用'\\'表示
3.类函数:
举例:
str1=name1.read()
作用:将文件指针所致文件的全部内容读取到一个字符串中
逐行读取:
with open(filename1) [as name1]
for line in name1:
print(line)
readlines()方法(类函数):这是文件指针的类的函数,功能为读取文件中的每一行,将各行储存到一个列表中,返回值就是
这个列表
10.2写入文件
with open(filename ,'w') as file3:
file3.write(str1)
关于这个写入字符串的函数,以及'w','a','r'就不赘述,不写默认是'r'
写入的时候自己加换行符
10.3异常(排除)处理
格式:
格式1:
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero")
这样做之后,在和它同文件夹的文件中遇到try代码中的错误时(不用具体的操作相同,只要系统将他们识别为认定的错误
类型),就不会运行上面的,而是运行下面的代码
格式2:写成类似if结构
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero")
只不过这样要放在直接运行的程序中,像一个if结构一样
补充--常见错误类型:
1.ZeroDivisionError
2.FileNotFoundError 找不到文件
3.ValueError 将字符串转换成整型或者浮点数据时,字符串中含有文本
pass语句: pass语句是一个空语句,在这个语句中什么也不做,但可以作为一个以后可能需要填充代码的标志
Python编程第11章:测试
11.1测试函数
格式:
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
'''测试name_function.py'''
def test_firt_last_name(self):
'''能够正确处理像Janis Joplin这样的姓名吗'''
formatted_name=get_formatted_name('janis','joplin')
self.assertEqual(formatted_name,'Janis Joplin')
unittest.main()
说明:1. 测试原理是建立unittest.TestCase的派生类,每一个派生类都是一个测试实例
Traceback会显示每一个测试-测试中的函数是否通过;每一个测试实例可以包含多项检查,每个检查写成一个
检查函数,
检查的方法为使用类函数self.assetEqual(parameter1,parameter),函数会自动反映(而不是返回)两个参
数相等的逻辑值到类中,最后返回在Traceback
2. 编写的每一个测试实例和测试函数中都必须包含test字样,只有包含test字样unittest类才会检查它
3. unittest Module中的更多断言方法
assertEqual(a,b)
assertNotEqual(a,b)
assertTrue(a)
assertFalse(a)
assertIn(item,list)
assertNotIn(item,list)
至于这些断言方法的功能和用法,自己看名字就知道了
4. 测试类的方法和测试函数的方法差不多,但编写测试类的代码时心里一定要有这个类,现在这个类处在一个怎
样的状态,然后一步一步地调用类函数,最后用以上断言方法检查
5. 关于unittest.TestCase的类函数setup()
setUp()函数可以写进自己编写的测试实例(类)中,setUp()函数一般专门用来生成测试数据,这组测试数据
经常被接下来的各种测试使用(都用这个),
setUp()函数的特点,在进行测试时,unittest会先看有没有setUp函数,如果有,则先运行它(生成测试
数据);如果没有,就会运行其他以test开头的函数(我也不知道顺序)