(本文当作一个学习笔记,也是自己学习过程中一些比较觉得很有用的东西)
一. 变量,输入输出
1.1 数值
1.1.1 整型
1.1.2 浮点型
1.1.3 abs,int,round函数
1.1.4 表达式
1.1.5 Py中数据对象的存储
1.2 字符串
1.2.1 字符串表示
1.2.2 索引以及切片
1.2.3 字符串常用操作
1.3 输入输出函数
1.3.1 input函数
1.3.2 print函数
1.3.3 格式化输出
二、 列表,元组,文件
2.1 列表
2.1.1 列表的定义
2.2.2 列表操作函数
2.2 元组
2.3 文件
2.3.1 打开文件
2.3.2 关闭文件
2.3.3 文件读
2.3.4 文件写
三、控制流结构
3.1 Python新增逻辑表达运算符
3.1.1 ASCII码与字符的转换
3.1.2 in 与 sort
3.1.3 自定义排序
3.2 循环结构和分支结构
3.1.1 while的用法
3.1.2 for的用法
3.1.3 分支结构
四、函数
4.1 函数的定义以及参数作用域
4.1.1 函数的定义
4.1.2 函数骚操作
4.2 自定义多优先级排序
这里没有像C语言一样,int四个字节,long long 八个字节,float单精度 ,double双精度,这种分别,python只有整型和浮点型。
这里的int就是整数的意思,没有范围。因为没有数据类型所以,数据的定义直接a = 1。
int(变量名字) 可以实现强制数据类型转化为整数。
此处的浮点型也没有双精度,单精度之分,例如a = 3.14
abs()函数可以返回数字的绝对值。例如:
int()函数可以实现数字的强制类型转换,转换为整型。注意此处int()是函数,不像C语言(int)a可以实现强制类型转化。例如:
round()函数可以实现浮点数的四舍五入结果,round(n,r) 为n保留r为小数,四舍五入后的结果。例如:
像C语言一样,可以实现加减乘除,这里Py新增了一下几种种运算符:
** 是乘方的意思,不过复杂度是O(n)的,内部实现没有使用快速幂算法优化。
// 是求商部分,也就是除法运算向下取整后的结果。 由于Py一个变量没有int和float之说,所以想得到整数要么使用int()函数要么使用 // 运算。
当执行第一行代码后,系统开辟空间存储数字5,然后n相当于一个引用。
当执行第二行代码后,系统重新开辟空间存储数字6,更改n的引用位置。
此处是有别于C语言的。
至于闲置内存的回收由Py的某个进程负责。
字符串在Py中不像C语言需要字符数组或者string来存储,字符串是一个由单引号或双引号括起来的整体。例如:
‘ Hello Python! ’ , " Hello Python! "
字符串可以直接赋值给变量。例如:
同C语言,字符串具有从0开始的索引,到 len-1 结束。不同的是字符串也有反向索引,字符串的最后一个下标为-1,倒数第二个为-2,等等
字符串也有切片的功能,a[m:n] 即为,下标为n开始到下标为m的前一个。a[m: ]为从m截取到最后。
len()函数返回字符串长度,例如:
upper() / lower( ) 返回字符串转化为 大 / 小 写字母组成。调用后并不影响字符串本身
rstrip()函数可以去除末尾空格
input(提示输入信息),返回值为输入的字符串,碰到Enter为止
很像C语言的gets函数,经常配合split(),int(),float () 使用。
同C语言 ‘ \ ’为转义字符。
print(val1 , val2 , val3) , 输出以空格分割的三个变量,并且自动换行
print(val1, val2 , val3 , sep = '+') , sep参数可以改变分割的字符
print(val1, val2, val3, end = ""), end参数可以改变终止的换行符
这里有一个很厉害的函数eval ( ),记不记得C语言打表达式求值的死亡大模拟,这个函数可以直接求表达式的值
print( 字符串.ljust(w) ) 输出字符串向左对齐,字宽为w
print( 字符串.rjust(w) )输出字符串向右对齐,字宽为w
print( 字符串.center(w) )输出字符串居中,字宽为w
列表是一个有序序列,元素可以是任意的类型。
列表的定义为a = [ "qwe" , 123 , 3.14 ]
len()函数返回列表的元素个数。
max( ) / min( ) / sum() 返回列表的最大值 / 最小值 / 和。(必须都为数值)
列表 . count(查找元素)返回所查找元素的数目
列表 . append(末尾插入对象)
列表 . insert (插入位置,插入元素)
split(s1)函数 ,将字符串以s1分割存入列表,返回一个列表。
s1. join(列表)函数,可以看作 split()的反函数,将列表中的元素用s1分割,
2.2.3 列表的复制
在Py中列表名可以看作一个空间的引用,所以当我们要复制列表的时候不可以直接list1 = list2,如果修改list1,同样list2会被修改。
元组是不可改变的有序序列。也可以像字符串一样切片。
元素的定义为 a = (val1 , val2 , val3 ) 或者 a = val1 , val2 , val3
Py 里交换元素可以 x , y = y , x 实际上是为元组赋值
file = open( “ 文件路径 ” ,权限 )
file 为文件句柄
打开文件后一定要有关闭操作。
file.close( )
file.read()
file.write() 返回写入文件字符的数目。
注意:键入file.close()才会真正写入文本。
因为Py中没有char这个类型,所以想要实现ASCII码和数字之间的转换也需要函数。
ord('A') 返回字符的ASCII码
chr(65) 返回ASCII码为65的字符
C语言原有的Py都有,但是新增了几个十分便利的
in 是个二目运算符,返回结果为前者是否为后者子串或者子元素,同样也有not in。
sort 列表排序函数,和C语言#include
但是sort要求列表元素都为数值或者字符串。
在C语言中要想自定义,需要重载运算符,或者手写比较函数,Py中调用更为方便。
list . sort ( key = 第一优先级 )
可以实现自定义排序
reverse参数可以设置逆序还是正序。
list . sort( key = 第一优先级 , reverse = True)
sort函数直接对原来的列表进行了修改,sorted函数不对原列表修改,而且返回排序后的列表
还有多优先级并且升降序不同,要自己定义的时候,需要用到functools模块,在后边函数的时候会重点提到。
这一部分和C语言很相似,记住子语句与父语句保持四个空格的缩进。
while 表达式 :
函数体
如果遍历元素为数字的话: 和C语言for(int i = n;i < m ; i++){ 函数体 }
for i in range ( n , m ):
函数体
n = int(input("Input n : "))
for i in range (1,n+1):
for j in range(1,n-i+1):
print(" ",end = "")
for j in range(1,2*i):
print("*",end = "")
print("")
如果要实现for(int i = n ; i <= m ; i += s) 这样的功能,可以使用for i in range (n , m , s)
for也可以直接遍历字符串或者列表值。
for也可以行读文件 for line in 文件句柄: (记得关文件)
if 语句 就是 if 表达式 :
else 变成了 elif 表达式 :
else else :
同时Py的 break 和 continue不变 。 记住子语句与父语句四个空格缩进就好。
(因为C语言的函数和Py的函数十分相似,所以这里重点讲Py的cmp_to_key。)
函数的定义不像C语言要确定一个返回值类型,因为在Py中没有严格的变量类型的区分。
只需要使用def 关键字即可定义。同时参数也不需要指明类型,返回值也没有类型,非常简单。
Py 可以返回多个参数,其实相当于返回值是一个元组,赋值的也是个元组
同时还可以按照参数名传参数,很骚的东西,感觉没什么大用。
在Py3中手写cmp函数被取消了,必须要使用function函数中的cmp_to_key()函数进行多优先级排序。
cmp_to_key ( mycmp ) 中 mycmp 就是自定义的手写函数。
参数为要排序元素
定义手写函数的时候,需要两个参数(val1 , val2),如果满足条件后,val1 排在后边 返回 1 ,排在前边返回 -1,如果完全相等返回0,这个返回0 不可以像C语言自定义排序那样不写,否则函数无效。
例如:先按照分数高低排,分数一样按名字字典序排序
import functools
def cmp1(n1, n2):
if(n1[1] > n2[1]):
return -1
elif(n1[1] < n2[1]):
return 1
else:
if(n1[0] > n2[0]):
return 1
elif(n1[0] < n2[0]):
return -1
else:
return 0
a = [['lili',96],['xiliang',90],['hailu',94],['hailong',94]]
print(sorted(a, key=functools.cmp_to_key(cmp1)))
sort还有很多花里胡哨的用法,此处不再介绍,一个手写cmp函数可以解决一切sort优先级问题。