Python学习笔记
1.Python基本
变量命名
1.包括字母、数字、下划线;
2.不能从数字开始;
3.区分大小写。
常见数据类型
- 整数、浮点数、字符串;
- 直接赋值,不用分号;
- 用单引号或双引号给字符串赋值。
Print()
- 使用print()函数显示变量值;
- 括号内可包含多个变量,用逗号分隔;
- 括号内变量可做计算,但不改变变量值;
- 只有赋值语句(使用等号)才能改变变量值。
- 变量之间隔离不会相互影响。
2.分析患者数据
把数据加载到python
- Numpy库表示数字python,当想处理大量数字,特别是要使用矩阵或阵列时使用它,引用import numpy
- 库库为基本的 Python 包提供附加功能,导入太多库会使程序复杂且减慢速度,所以按需引用。
- numpy.loadtxt()函数调用,中间点符号表示从属关系,即loadtxt包含于numpy库。括号内有两个参数,文件名和每行分隔每个值的分隔符。两者都为字符串所以要用引号。数据太多时会省略显示。
- data=numpy.loadtxt()将数组分配给变量储存在内存中。data的数据类型为
表示numpy库中的n维阵列。 - print(type(data))显示data数据类型;
print(data.dtype)显示data阵列中的元素的数据类型;
print(data.shape)显示阵列形状;
以上皆称为变量data的属性。
6.data[20,30]:可以通过索引查找整列中某一具体元素;
7. 与c语言一样索引从0开始。
数据切片
- print(data[0:4, 0:10])显示data中0~3行,1~9列,即包括左边但不包括右边。不写下界则默认0,不写上界则默认至尾端,上下界都不写则默认全部。
数据分析
- numpy几个功能numpy.mean(data) 求data中所有数据均值。numpy.max(data), numpy.min(data), numpy.std(data)
- numpy.再按下tab 显示numpy可用功能;
numpy.mean? 解释numpy库中mean()函数怎么用;
也可以用help()。
3.符号# 注释
4.print(numpy.mean(data, axis=0))data中每一列均值;
5.print(numpy.mean(data, axis=1))data中每一行均值。
6.字符串有与数组类似操作
数据堆叠
- numpy.hstack([A, A])水平组合
- numpy.vstack([A, A])垂直组合
- numpy.delete(A, 1, 1)删除,第一个参数为阵列,第二个参数为索引号,第三个参数为行列,1为列,0为行。即删除A阵列索引为1的一列。
- numpy.diff(data, axis=1)同一行不同列之间处理数据,显示后一个数据减去前一个数据的差异值
- numpy.absolute()取绝对值
重点axis=1表示同一行的不同列数据比较,axis=0表示同一列的不同行的数据比较。
3.可视化表单数据
没啥好说,看代码就行
import matplotlib.pyplot image = matplotlib.pyplot.imsho(data) matplotlib.pyplot.sho()
ave_inflammation = numpy.mean(data, axis=0) ave_plot = matplotlib.pyplot.plot(ave_inflammation) matplotlib.pyplot.sho()
import numpy import matplotlib.pyplot data = numpy.loadtxt(fname='inflammation-01.csv', delimiter=',') fig = matplotlib.pyplot.figure(figsize=(10.0, 3.0)) axes1 = fig.add_subplot(1, 3, 1) axes2 = fig.add_subplot(1, 3, 2) axes3 = fig.add_subplot(1, 3, 3) axes1.set_ylabel('average') axes1.plot(numpy.mean(data, axis=0)) axes2.set_ylabel('max') axes2.plot(numpy.max(data, axis=0)) axes3.set_ylabel('min') axes3.plot(numpy.min(data, axis=0)) fig.tight_layout() matplotlib.pyplot.savefig('inflammation.png') matplotlib.pyplot.sho()
4.循环重复操作
for variable in collection:
# do things using variable, such as print
以冒号开始循环,循环结尾无语句。使用缩进来识别循环体。
ord = 'oxygen' for char in ord: print(char)
循环变量char可随意替换,但最好使用有意义的名字
只是计算字符串长度最好用内置函数 len()
函数range()的使用
for idx, val in enumerate(a_list): # Do something using idx and val5.在列表中存储多个值
列表是一个可以存储许多值的容器。列表内置到语言中不必通过库来使用。列表和字符串之间有一个重要的区别我们可以更改列表中的值,但我们不能更改字符串中的单个字符。
可在原地修改的数据称为可变数据,而无法修改的数据称为不可变数据。字符串和数字是不可改变的。这并不意味着具有字符串或数字值的变量是常数,当我们想要更改字符串或数字变量值时,我们只能用全新的值替换旧值。
另一方面,列表和数组是可变的我们可以在它们创建后修改它们。我们可以更改单个元素、附加新元素或重新排列整个列表。对于某些操作(如排序),我们可以选择是使用修改本地数据的函数,还是返回修改后的副本并保留原始副本的函数。
在本地修改数据时要小心。如果两个变量是指相同的列表,并且您修改了列表值,则两个变量都会发生变化!
如果您电脑维修网希望具有可变值的变量是独立的,则在分配该值时必须复制该值。
salsa = ['peppers', 'onions', 'cilantro', 'tomatoes'] my_salsa = list(salsa) # <-- makes a copy of the list salsa[0] = 'hot peppers' print('Ingredients in my salsa:', my_salsa)
Ingredients in my salsa: ['peppers', 'onions', 'cilantro', 'tomatoes']
在处理大量数据结构时,直接修改本地数据效率会比返回副本高得多。编写代码时,您应该考虑这两个方面。
由于列表可以包含任何 Python 变量,它甚至可以包含其他列表。(与c语言中的数组类似)
Python 中的列表可以包含不同类型的元素
可以通过以下几个函数修改列表
odds.append()#增加 odds.pop()#减少 odds.reverse()#反转
与字符串相似,也可以通过括号直接指定访问列表
非连续切片第三个参数指定空格
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37] subset = primes[2:12:3] print('subset', subset)
subset [5, 13, 23, 37]6.分析来自多个文件的数据
import glob print(glob.glob('inflammation.csv'))
glob.glob函数参数为字符串,查找文件只用到''",''?'',"[ ]"。表示匹配任意字符串,?表示匹配任意单个字符,[ ]表示指定范围内的单个字符。
配合for 一次处理多个文件
7.选择语句与c语言相似。
关键字and or not pass
positive_sum = 0 negative_sum = 0 test_list = [3, 4, 6, 1, -1, -5, 0, 7, -8] for num in test_list: if num > 0: positive_sum += num elif num == 0: pass else: negative_sum += num print(positive_sum, negative_sum
将列表分类
'String'.startsith('Str')
True
'String'.startsith('str')
False
for filename in filenames: if filename.startsith('inflammation-'): large_files.append(filename) elif filename.startsith('small-'): small_files.append(filename) else: other_files.append(filename) print('large_files:', large_files) print('small_files:', small_files) print('other_files:', other_files)
数元音字母
voels = 'aeiouAEIOU' sentence = 'Mary had a little lamb.' count = 0 for char in sentence: if char in voels: count += 1 print('The number of voels in this string is ' + str(count))
-
零,空字符串,和空列表被认为是false所有其他数字、字符串和列表都被认为是ture。
def fahr_to_celsius(temp): return ((temp - 32) (5/9))
在函数内部创建的变量执行完以后将不复存在,如果要在函数之外使用,可以将函数调用的结果储存在变量中。
使用三个引号写注释可使注释存在不同行中。
变量命名要注意代码可读性。
函数参数的设置非默认参数要在默认参数之前。
9.错误和异常traceback
Syntax Error
Indentation Error
Name Error
Idex Error
File Error
10.防御性编程assert
它会评估断言的状态。如果这是真的,Python 什么都不做,但如果它是假的,Python 会立即停止程序,如果提供错误消息,则打印错误消息。
numbers = [1.5, 2.3, 0.7, -0.001, 4.4] total = 0.0 for num in numbers: assert num > 0.0, 'Data should only contain positive values' total += num print('total is:', total
-
A precondition is something that must be true at the start of a function in order for it to ork correctly.
-
A postcondition is something that the function guarantees is true hen it finishes.
-
An invariant is something that is alays true at a particular point inside a piece of code
But assertions aren’t just about catching errors: they also help people understand programs. Each assertion gives the person reading the program a chance to check (consciously or otherise) that their understanding matches hat the code is doing.
Most good programmers follo to rules hen adding assertions to their code. The first is, fail early, fail often. The greater the distance beteen hen and here an error ours and hen it’s noticed, the harder the error ill be to debug, so good code catches mistakes as early as possible.
The second rule is, turn bugs into assertions or tests. Whenever you fix a bug, rite an assertion that catches the mistake should you make it again. If you made a mistake in a piece of code, the odds are good that you have made other mistakes nearby, or ill make the same mistake (or a related one) the next time you change it. Writing assertions to check that you haven’t regressed (i.e., haven’t re-introduced an old problem) can save a lot of time in the long run, and helps to arn people ho are reading the code (including your future self) that this bit is tricky.
测试驱动型开发
在编写他们锻炼的功能之前编写测试称为测试驱动开发(TDD)。其拥护者认为,它产生更好的代码更快,因为
- 如果人们在编写要测试的东西后编写测试,则会受到确认偏差的影响,即他们下意识地编写测试以证明其代码正确,而不是发现错误。
- 写作测试帮助程序员找出该函数实际上应该执行什么。
-
在尝试调试代码之前,了解代码应该做什么。
-
每次都让它失败。
-
让它快速失败。
-
一次改变一件事,因为一个原因。
-
跟踪你所做的一切。
-
谦虚点
原教程是使用bash,好像要装Linux,我使用poershell将就一下。
将bash命令中$换成poershell中的&一样运行。
import sys print('version is', sys.version)
PS C:Usersadmin> & python Desk/sc-python/code/sys_version.py version is 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)]
import sys print('sys.argv is', sys.argv)#argv代表参数值
PS C:Usersadmin> & python Desk/sc-python/code/argv_list.py#不加参数第一个值sys_argv[0]为路径 sys.argv is ['Desk/sc-python/code/argv_list.py'] PS C:Usersadmin> & python Desk/sc-python/code/argv_list.py first second thrid sys.argv is ['Desk/sc-python/code/argv_list.py', 'first', 'second', 'thrid']
$ cat ../code/readings_02.py
import sys import numpy def main(): script = sys.argv[0] filename = sys.argv[1] data = numpy.loadtxt(filename, delimiter=',') for ro_mean in numpy.mean(data, axis=1): print(ro_mean) if __name__ == '__main__': main()
$ python ../code/readings_02.py inflammation-01.csv
运行与导入
为了让 Python 脚本在导入时或作为脚本运行时按预期工作,我们通常将生成输出的脚本部分放在以下if语句中
if __name__ == '__main__': main() # Or hatever function produces output