Python基础知识

高总 2022-9-14 601 9/14

一些在刚学习python时的笔记
当时写的比较杂乱,最近整理一下发出来
1.变量与数据类型
变量:数字字母下划线(不能以数字开头)
驼峰命名法:指混合使用大小写字母来构成变量和函数的名字。当变量名或函数名是由一个或多个单词连结在一起构成的唯一识别字时,第一个单词以小写字母开始,从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myName、myAge,这样的变量名看上去就像骆驼峰一样此起彼伏,因此被称为驼峰命名法。
python可以使用连等 即X=Y=Z=1以及同时赋值x,y,z=(1,2,3);或通过已赋值的变量向未赋值变量赋值,即x=1,y=x,此时打印y的值为1
数据类型:基本操作+-*/
**(幂运算) %(模运算) //(整除运算)
转义字符\
字符串和字符串之间只可以进行加乘运算
定义字符串一定要使用“”或‘’否则=号的连接将报错
因为该变量未定义
==表示判断 结果为布尔运算的结果
and 并运算 有f就f
or 或运算 有t就t
Not运算
None 非常特殊的一个常量 既不是True也不是False
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Python中分支语句
Python中使用缩进作为代码块,一般为4个空格或一个Tab
if语句使用:作为条件语句结束的标识
在Python语句中IF和ELSE并不一定要同时出现
If语句执行完if或else后会顺序执行剩下的语句
循环语句 for i in range(): 注意()左闭右开 在python中均使用 , 连接。例如在java中的语法“test”+"test"在python中写作“test”,"test"

接下来的几种情况需要先说明一下continue和break两个语法的区别

continue:跳过这次循环,直接开始下一次循环
break:直接结束循环

但是要注意嵌套循环中的break和continue都只对一层循环起作用,用在内层循环时,只对内层循环其作用,对外层循环无影响

p1:

for i in range(1,8):
    if i!=1:
        print(i,"result1")
    print("result2")

此时当i=1时,输出result2,其余均输出i result1 result2,这个其实和else还是有点区别的,else的情况下不会在除了i=1的情况下输出result2,主要还是通过缩进判断他们所处的层级。
p2:

for i in range(1,8):
    if i!=1:
        print(i,"result1")
print("result2")

此时第二个print语句不在循环代码块当中,输出结果为i result(i!=1) result1 result2,在其他阅读代码的时候也要注意这很重要的一点,即跳出循环的时间。
p3:

for i in range(1,8):
    if i!=1:
        print(i,"result1")
    else:
        print("result2")

此时为正常的if   else语句

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
p4:

for i in range(1,8):
    if i!=1:
        print(i,"result1")
        continue
    print("result2")

这个时候的语句就和if else一样了,在执行到continue的时候,就中断了,但是这个continue是比if下一级的,因此result2还是要执行的,当i=1时,continue是没有执行过的,因此代码的结果与if else的结果一样,
p5:

for i in range(1,8):
    if i!=1:
        print(i,"result1")
    continue
    print("result2")

此时,将print的级别提到与if一样,那么i=1时continue也将执行,所以i=1时将不会输出任何值,其余p4一致,即result2就不输出了,因为这个时候不存在跳出循环的情况。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
接下来是break的情况,一旦出现就会结束整个循环
p6:

for i in range(1,8):
    if i!=1:
        print(i,"result1")
        break
    print("result2")

break语句会直接结束整个循环,而i=1时并为执行到break,要是break再上一层就要执行到了,但此时只有在i=2时才会输出到break。因此此时的输出应该是result2 2,result1,之后直接跳出了循环
p7:

for i in range(1,8):
    if i!=1:
        print(i,"result1")
    break
    print("result2")

此时break与if同级,因此不会输出任何值,当然第二个print再上一级就可以输出了,因为break已经管不到了。
注:补充一个小知识点,单句用#注释,多段多行注释可以用三个单引号'''注释 ''' 或者三个双引号"""注释"""
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一些Python容器
List:列表,可以理解为一列火车,接下来介绍一些List的相关操作
设有一个列表list_a=["I","Love","You"] 注:字符使用""或者''都可以
增:①插入某个位置,例如我想在开头,也就是第[0]个位置插入单词Do
list_a.insert(0,"Do")
②在末尾插入,当然首先可以获取长度len,然后在len处插入(指定-1位置,即倒数第一个位置是不太行的,因为这样会使原本最后位置的元素向后移动一位,结果实际上插到了倒数第二位)或者随便一个足够大的位置处插入也可以,只要是一个比当前列表长度大的地方,总会插在末尾,长度也不会变,这个不知道是不是pycharm解释器的作用。
还可以使用拼接操作list_a.append("?")
删:①针对某一个元素的删除,例如增的过程执行完之后,想要删除结尾处的?,则del list_a[-1]当然del list_a[len(list_a)-1]也是可以的,del操作如果针对的是整个列表的话,那么整个列表都会被删除,注意不是空集而是删除,再次访问该列表将会报错。这个操作只针对位置而不针对具体的某个元素,针对具体元素的del操作将报错。
②clear操作:list_a.clear()将会删除列表中的元素,再次访问列表将会输出空列表
改:①想要修改某一位置的元素:list_a[1]="he",当然修改末尾的元素与前面提到的方法一致
②想要倒置整个列表,则list_a.reverse(),

若同时还想保留原有的表格list_b = list_a[::-1]来翻转并赋值给新的表格
③列表是支持加和乘操作的,例如list_b=["Yes"],则可实现list_a+list_b的操作,连接后列表中元素的顺序与加法的顺序相关,当然乘法操作只存在于自身乘法,两个不同的列表相乘肯定会报错
④切片操作,是个人觉得Python中最特殊,也是个人比较喜欢Python语句的原因。在列表中如果想截取某个片段,如想在list_a中截取love you这两个单词,则list_a[1:3],切片操作也是左闭右开区间,当然也支持默认切片[:3]从0开始,[3:]从3切片到最后
查:list能实现的查找包括查找最大值:max(list_a),最小值min(list_a),可以说就是首位和末位的值。查找某个元素是否在列表中,如"he"in list_a 返回结果为true或false,以及计数某元素在列表中的数量,list_a.count("Love")返回结果为1,注意是大小写敏感的。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
Tuple:不可变容器,基本上于List差不多,使用()定义,但是不支持增删改操作,除了切片,当然整个删除释放空间是可以的。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
dict:字典,定义时成对出现,需要一组key与value对应,value可以为空。注意写定义的时候使用花括号 dict = {"key":"value",......}
eg:dict_a={"我":"i","你":"","他":"he"}
增:直接写定义,dict_a["她"]="she"
删:和dist差不多,只是dist是用位置表示,这里用key表示,因此无所谓位置。del dict_a["她"],支持clear操作dict_a.clear()
改:直接通过key值修改,dict_a["我"] = "wo"
查:可以查询所有key值,dict_a.keys() 可以查询所有value dict_a.values() 以及所有项 dict_a.items() 还有len() 同时能够检测某个键值是否在dict中,但是无法从value下手
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
set:集合,可以看作只有key值的dict,也用{}表示,只是不写value值,但是当想生成一个空列表时,需要set_a=set(),而不是a={},因为这样会生成一个空的dict。
增:set_a.add("I")
删:不支持del操作,要删除的时候调用set_a.remove("I"),当然清除也一样
改:似乎不支持修改操作,可以使用remove+add
查:也支持某元素是否在集合中的查找,返回true或false,还支持另外一种查询,即交集和并集。set_a= {1,2,3,4,5} set_b= {5,6,7,8,9} 此时set_a&set_b={5} set_a|set_b={1,2,3,4,5,6,7,8,9}
还支持查询a是否是b的子集:set_a.issubset(set_b)以及差运算,set_a-set_b
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
字符串st:用""定义,其实和list是很像的。
①支持分割操作,切片完成后会生成一个list。举个例子:
a = "I,Love,You,?"
s = a.split(,)
s即为一个在字符串a中用,分割生成的一个list,当然也可以用空格等分割
②分割完之后如果想把元素拼接成字符串,需要使用join操作,如
a = "I,Love,You,?"
s = a.split(",")
b = ",".join(s)
b即为使用逗号拼接的listb中的元素的字符串
③字符串也支持切片操作,如b[1:3]...,如果是空格分割的话,空格也算一个位置
④也支持查找,但是有一种很特殊的查找,可以找到某一个元素在字符串中的哪一个位置,如Love,会返回2,即L的位置,当查询o时,出现过两次,但是只会返回第一次出现的位置。找不到即会返回-1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
函数的声明传参等等。这一部分主要就是想说明把一个个性的功能转化为共性的功能。将功能一般化:如我想写一个输出从0到当前数的程序:
def sum(j):
for i in range(j+1):
print(i)
sum(100)
不定长参数:当需要的参数很多的时候,我们不可能把所有的参数都列出来,因此出现不定长参数,即args,还有另一种kargs,可以指定参数值,这里有个例子,暂且按下不表。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
函数的默认参数:在未指定参数时,会按照顺序默认赋值,例如
def love(a="I",b="you"):
print(a,"love",b)
print(love())
print(love("He"))
print(love("He","Me"))
这个时候除了第一个正常执行,第二个He会代替I,第三个会顺次代替I和you。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
return的作用:

①不带return的函数会返回none,可以举个例子

def area(r):
    s = r*r*3.14
print(area(2))

这个时候返回的是None
而当:

def area(r):
    s = r*r*3.14
return s
print(area(2))

这时正常返回12.56
②多个返回值:

def area(r1,r2):
    s1=3.14*r1*r1
    s2=3.14*r2*2
    return s1,s2
l1,l2=area(2,3)
print(l1,l2)
print(area(2,3))

这个时候两个输出,第一个先接收返回值再输出,输出的结果就是两个返回值,而第二个输出的是tuple形式的一组值(12.56, 18.84)
③return相当于一个break使用,接着上文break的例子:

def test():
    for i in range(1,8):
    if i!=1:
        print(i,"result1")
        return
    print("result2")
test()

输出值是与使用break时一样的,所不同的是return需要写在函数当中,而不能像break一样随便使用。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
匿名函数:
fun_1 = lambda x,y:x+y
print(fun_1(1,1))区别于def定义的显式函数,了解一下,正常还是使用def定义函数。

lambda是匿名函数的标志。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
局部变量和全局变量:没什么好写的,局部可以使用全局变量,但是不能在声明局部变量之外的地方使用局部变量,此外,如果函数中的局部变量与全局变量冲突,那么在函数中以自己的局部变量优先。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
模块:每个py文件就是一个模块,模块内储存的变量和函数都可以使用import+模块名被引用,然后用模块名+”."+模块的变量名/函数名方式来引用。还可以用from+模块名+import+函数名或变量名的方式来引用。
举个例子:我先写了一个文件sd.py里面定义了一个常量d和一个函数s用来计算半径为r的圆的面积:

d = "0.1厘米"
def s(r):
    s = 3.14*r*r
    return s

接着在另外一个文件里调用它

import sd
print(sd.d)
print(sd.s(2))

当然也有一种方法不用再写sd.
from sd import d
from sd import s
print(d)
print(s(2))
也可以,如果感觉这种方法过于重复,也可以直接 from sd import*可以直接全部引用函数中的变量与函数
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.

- THE END -

高总

10月08日18:57

最后修改:2023年10月8日
0

非特殊说明,本博所有文章均为博主原创。