黑马程序员技术交流社区

标题: 基础知识学习笔记 [打印本页]

作者: Curry_Young    时间: 2018-6-3 07:09
标题: 基础知识学习笔记
基本变量类型1.变量的定义




储存数据的容器,程序中可随时修改变量的值,python始终记录变量的最新值。定义变量时不需要指定类型,运行时解释器会根据赋值语句右侧输入的数据自动推到出变量保存类型。
变量的定义可以一次给多个变量定义值a,b,c = 10,12,13(a,b=b,a可以实现值的交换)







2.变量的命名规范(标识符与关键字)




1.只能包含数字,字母以及下划线
2.不能以数字开头,不能有空格;少用下划线开头命名,避免与私有属性混淆3.见名知意4.区分大小写5.不能与关键字重名6.尽量不要与系统内置函数名重合







3.注释




单行注释:以#开头,#右边的所有东西当做说明,而不是真正要执行的程序,起辅助说明作用
多行注释:以”””多行注释”””表示。也可以将双引号改为单引号







4.基本变量类型
(使用type(变量名)查看该变量的类型)
4.1数字型Numbers




1.整型:int表示整数类型      long长整型(python2中使用,但是python3不使用,都是用int表示)
2.浮点型:float表示是一个小数类型3.复数:complex主要用于科学计算。平面场问题,波动问题,电感电容问题4.布尔类型:真假True:非零即真 False:0







4.2非数字型(列表、字典、元组为高级变量类型)




字符串(str):string由引号引起来(单引号或双引号)
  字符串之间可以用+号进行连接  字符串*号表示将字符串进行复制n次,并将其拼接起来







None是独立的数据类型,表示空
5.类型转换




int(x)将x转换为一个整数
float(x)将x转换为一个浮点数str(x)将x转换为一个字符串bool(x)将x转换为布尔值







6.变量的输入与输出6.1输入




需要获取用户在键盘上输入的信息,需要使用input()函数。可以用变量储存input()函数输入的值。注意输入的值存储数据类型都是字符串类型。语法:字符串变量 = input(“提示信息”)








6.1输出(格式化输出)




输出:(格式化输出)
包含%的字符串被称为格式化字符串。相当于一个占位符%s:字符串%d:整数 (%06d表示如果这个数是六位数以上,则显示本身,当少于六位数时,前面用0来补全至六位数。)%f:浮点数 (%.2f表示小数点后显示两位)%%:输出%变量数据类型是数字时,可以用%d、%f、%s占位,变量数据类型是字符串时,只能用%s占位,不能用%d、%f。因为并不是所有的字符串都可以转换成数字。语法格式:“格式化字符串”%变量名“格式化字符串”%(变量名1,变量名2,。。。)







运算符1.算术运算符




加减乘除(+、-、*、/)、取整(//)、取余(求模%)、幂(**)








2.赋值运算符




=
用于给变量赋值







3.复合赋值运算符




+=、-=、*=、/=、//=、%=、**=








4.比较运算符




(需要是相同的数据类型才能比较):
>、<、>=、<=、==、!=其返回值是boolean类型







5.逻辑运算符




与and  或or  非not
使用逻辑运算符按照逻辑连接多个条件与and(&): 每个条件都为true,结果才是true;只要有一个为false,就为false或or(|):只要有一个条件为true,结果就是true;所有条件都为false,结果才是false非not(!):将条件boolean值取反。Q:逻辑运算是否每个条件都要判断完,如果已经判断出不符合,还需要判断吗?判断条件的先后顺序?运行速度?逻辑运算符连接的是什么?A:如果已经判断出不合格,计算机就不再运算后面的条件。通过括号改变优先级。隐式转换(系统默认的转换):print(1 and 2)结果是2 print(1 or 2)结果是1print(not 3)结果为False优先级:print(1 or 2 and 3)结果是1  and 优先级更高括号可以改变优先级逻辑运算符是连接多个boolean值的表达式,返回结果是表达式







6.位运算符




左移(<<)右移(>>)按位与(&)按位或(|)








语句判断语句基本语法:1.格式:(注意缩进)




if 判断条件(条件表达式为boolean值):
    条件成立执行的语句    ......







注意:If语句及其缩进的部分可以看做一个完整的代码块。





if 要判断的条件:
    条件成立时执行语句else:    条件不成立时执行的语句







注意:Else需要与if配合使用





if 条件1:
    语句1elif 条件2:    语句2...​elif 条件n:    语句nelse:    所有条件都不成立时执行的语句







注意:1. elif 需要与if配合使用。需要判断多个条件,条件不同时执行代码不同。同时判断多个条件,所有条件是平级的,无前后关系。
2.逻辑运算符也可以处理多个条件,但是其执行代码是同一个。
2.if嵌套




在满足之前条件下,再增加额外判断时需要使用if嵌套。
格式:if 条件1:    语句1    ...    if 条件1基础上的条件1.1:        条件1.1满足执行的语句1.1        ...    else:        条件1.1不满足执行的语句2        ...else:    条件1不满足执行的语句3    ...







3.随机数的使用




导入随机数模块random
import randomnum = random.randint(a,b)       随机生成并返回一个[a,b]之间的整数,包含a,b







导入工具包时,应放入顶部,方便下方的代码,在任何需要的时候使用该工具包。
循环语句基本语法:
循环: 让需要执行的代码按照指定次数重复使用,提高代码复用性
1.格式:




设置初始条件:计数器
while 条件(判断计数器达到目标数):    条件满足执行的代码    ...    处理条件(计数器改变)







注意:循环初始值、循环条件、循环增量
死循环:如果没有修改循环判断条件,将会导致程序持续执行,无法终止
2.sys包(系统包)




import sys
sys.maxsize(得到一个最大值)当循环中的条件定义为这个值时,也相当于死循环while True:(同理死循环)--灵活运用flag变量,在循环中更改该值







3.break和continue关键字




break:只能在循环里使用,终止整个循环,程序碰到break就直接跳出循环,不再执行后面的代码。













continue:只能在循环里使用,终止本次循环,程序碰到continue就会跳出这一次循环,继续进行下一次循环,这次循环后面的代码都不执行。








4.嵌套




在大循环里又嵌套循环
while 条件1:    满足条件1执行的语句    ...    while 条件2:        满足条件2执行的语句        ...        处理条件2    处理条件1







注意:循环要注意缩进,不要混淆!
5.print()语句




print("打印的内容",end = "以什么结尾")








print方法的使用




def print(*objects, sep=' ', end='\n', file=None, flush=False) Inferred type: (objects: tuple, sep: str, end: str, file: Any, flush: bool) -> None
print(value, ..., sep=' ', end=' ', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream.







6.转义字符




字符串内部使用的特殊字符,用于字符串操作








常见转义字符




\t  协助输出文本,保证垂直方向对齐(制表符Table)
\n  在控制台输出一个换行符(newline)\r  回车(\r前的不显示,仅显示\r后面)\"  在控制台输出一个双引号(")\'  单引号\\  反斜杠字符







linux里用\n换行
windows里用\r\n表示换行
函数基础1.函数的定义(define)




'''把具有独立功能的代码块组织为一个小模块,实现单一的功能'''
def function_name():    #函数封装的代码







2.函数的调用




function_name()直接调用函数。必须先定义函数,才能调用函数








单步调试:Pycharm中F8和F7的使用
Step over:单步执行,但是会将函数看作一行代码直接执行
Step into:进入函数内部单步执行
3.函数的传参def 函数名(参数1,参数2,...,参数n):        代码块#调用函数函数名(参数1,参数2,...,参数n)
1.调用时传递的参数是实参:把真实数据传递到函数里;
定义时的参数为形参:用于接收参数,在函数内当做变量使用。
2.参数增加了函数的通用性,针对相同的数据处理逻辑,能够适应更多的数据
缺省参数:4.函数的返回值返回值是函数执行完成后,给调用者的一个结果,使用return关键字,调用者使用变量接收。(一个函数可以有多个return)
1.在哪里调用,就返回到哪里。return表示返回,下方的代码将不会执行
5.函数的嵌套调用
在函数里面调用另外一个函数,实现函数的嵌套使用。
碰到函数调用,就进入该函数定义的位置,执行该函数,函数执行完返回到调用位置。6.使用模块中的函数模块是什么?模块是一个提供工具的工具包,通常是已经开发测试完成的,本质就是一些.py文件。可以让曾经编写的代码在相关操作领域重复使用。在模块中定义的全局变量,函数都是模块能够给外部直接使用的工具使用import关键字导入外部模块。在使用import导入时,在执行程序时会先将这个模块编译成二进制文件,也叫字节码文件(Pyc文件),使得程序运行速度得到提升。模块名也是标识符。需要符合命名规范。7.函数的参数及返回值:
是否接收参数,是否有返回值,根据实际功能需求决定。
元组可以包含多个数据,因此可以使用元组让函数一次返回多个值。使用return时默认时元组,可以不需加括号。可以使用多个变量,一次性接受函数的返回结果。元组中的元素将根据变量的先后位置,顺序的给变量赋值。变量的个数要与元组内元素个数保持一致。8.多值参数(不定长参数):
有时可能需要一个函数能够处理的参数个数是不确定的,这个时候,就可以使用多值参数





def demo(num, *args, **kwargs):
    print(num)    print(args)    print(kwargs)demo(1, 2, 3, 4, 5, name="小明", age=18, gender=True)







提示:多值参数 的应用会经常出现在网络上一些大牛开发的框架中,知道多值参数,有利于我们能够读懂大牛的代码
元组和字典的拆包




def demo(*args, **kwargs):
    print(args)    print(kwargs)# 需要将一个元组变量/字典变量传递给函数对应的参数gl_nums = (1, 2, 3)gl_xiaoming = {"name": "小明", "age": 18}# 会把 num_tuple 和 xiaoming 作为元组传递个 args# demo(gl_nums, gl_xiaoming)demo(*gl_nums, **gl_xiaoming)







9.函数的递归函数内部调用函数本身。针对参数不同,处理结果不同。当参数满足一个条件时,函数将不再执行,即递归的出口。
在处理不确定循环条件时,会非常有用
高级变量类型一、列表list使用一个变量专门用于储存一串数据,可以是不同类型,但是通常是使用迭代遍历处理相同类型的数据,对每一个数据进行统一的处理。用[]定义,数据之间逗号隔开。索引(下标):数据在列表中的位置编号。例如:name_list = ["a","b","c","d"]列表的常用操作(方法)1.取索引和取值:获取索引对应的值是多少:name_list[2]。超出索引范围会报错!获取某个值所对应的索引位置:name_list.index("c")。如若值不存在在列表中,则会报错。2.修改指定位置的数据name_list[2] = "good"。将列表索引为2中的"c"修改为"good"。如若列表指定索引不在列表长度范围内,则会报错。3.增加数据(三种方法)3.1 append方法:name_list.append("hello")将"hello"添加到列表末尾。添加的对象可以是另一个列表,但是会将整个列表整体添加进去,以列表形式存储一个索引位置。3.2 insert方法:name_list.insert(2,"hello")将"hello"添加到列表索引为2的位置。(指定索引位置插入的方法)3.3 extend方法:tep_list = ["1","2","3"]  name_list.extend(tep_list)将tep_list中的整个列表数据整体添加到name_list末尾,会将列表中的每一项数据分别存储一个索引位置,得到["a","b","c","d","1","2","3"]
注意:append和extend添加形式的不同
append添加的是一个对象
extend添加的是能够迭代的迭代器
4.删除数据(三种方法)4.1 pop方法:name_list,pop()默认删除列表最后一个数据。当传递一个索引参数时,可以删除指定索引的数据name_list.pop(2)将索引2位置的"c"删除。4.2 remove方法:name_list.remove("b")将列表中的"b"删除。删除列表指定数据。且删除出现的第一个该数据,如果删除的指定数据不存在,则会报错。4.3 clear方法:name_list.clear()删除列表中所有数据,即清空列表。
4.4 注意:还可以使用del关键字来删除列表操作。del关键字本质上是用来将一个变量从内存中删除(删除对象的引用),后续代码将不能再继续使用该变量。(日常使用尽量用列表内删除数据的方法)
del name_list[2] 将列表索引位置2处的"c"删除了
关键字是Python中内置的具有特殊意义的标识符。关键字的使用不需要括号。函数和方法的使用需要一对小括号。
5.列表统计方法5.1 统计列表长度:len(name_list)得到列表长度5.2 统计列表数据出现的次数:name_list.count("c") 统计列表中"c"出现的个数6.列表的排序6.1 升序排列:name_list.sort()6.2 逆序排列:name_list.reverse()6.3 降序排列:name_list.sort(reverse = True)
7.列表的循环遍历遍历:从头到尾依次从列表中获取数据,在循环体内部,对每一个元素执行相同的操作。迭代遍历(iteration):使用for关键字实现迭代遍历格式:(for循环)for name in name_list:        每次内部循环执行的语句range 的用法for i in range(int_num1,int_num2):#遍历[int_num1,int_num2)之间的整数,默认步长为1(步长表示两数的差值)for i in range(int_num1,int_num2,3):#遍历[int_num1,int_num2)之间的整数,步长为3(步长表示两数的差值)
for 循环可以遍历所有非数字类型的变量:列表、元组、字典及字符串
二、元组(tuple)定义用()定义一个元组,数据之间用逗号分隔,索引表示数据在元组中的位置编号。name_tuple = ("zhang","li","wang")
注意:元组与列表类似,最为不同的是元组不能够修改储存的数据(而列表可以),用小括号定义(列表是用中括号定义),通常储存不同类型数据(列表通常储存相同类型数据),通常不用for循环遍历,因为数据类型通常不同,不便操作(列表常用for循环遍历,数据类型相同)
当只定义一个元素的元组时,需要在后面加一个逗号name_tuple = ("a",)
当定义一个空元组时,只需empty_tuple = ()由于不能修改,所以没有什么意义
元组的常用操作(包含的方法与列表方法的使用一样)1.取索引和取值:获取索引对应的值是多少:name_tuple[2]。超出索引范围会报错!获取某个值所对应的索引位置:name_tuple.index("li")。如若值不存在在元组中,则会报错。2.元组统计方法2.1 统计元组长度:len(name_tuple)得到元组长度2.2 统计元组中某个数据出现的次数:name_tuple.count("li") 统计元组中"li"出现的个数应用场景元组和列表之间的转换
使用list()函数将元组转换为列表:                list((元组变量名)
使用tuple()函数将列表转换为元组:        tuple([列表变量名])
三、字典(dictionary)定义用{}定义一个字典,字典使用键值对存储数据,键值对之间用逗号分隔。字典是无序的对象集合。而列表和元组是有序的对象集合。键和值之间使用冒号(:)分隔xiaoming_dict = {"name":"xiaoming","age":18,"gender":True,"height":1.75}键key:是索引(用来获取数据),必须是唯一的,只能使用字符串、数字或元组。(因为不可更改)值value:是数据(用来保存数据),可以取任何数据类型字典常用操作1.取值获取字典中某个键所对应的值result = xiaoming_dict["name"]返回的result值就是"name"键对应的value值"xiaoming"当需要获取的键不存在字典中将会报错KeyError2.增加/修改新增一个键值对xiaoming_dict["weight":70.5]将在该字典中新加了一个"weight"的键和"70.5"的值修改一个键值对xiaoming_dict["age":20]将该字典中age信息修改为20
当输入的键key存在时,就是修改字典的值value;当输入的键key不存在时,就是新增一个新的键值对
3.删除指定需要删除的键keyxiaoming_dict.pop("name")将删除字典中name这个键及对应的值。即删除整个键值对。如果删除的key不存在,将会报错。4.统计键值对数量len(xiaomning_dict)返回该字典中所有键值对的个数5.合并字典temp_dict = {"weight":70.5}xiaoming_dict.update(tem_dict)将tem_dict中的键值对加入到原字典中
如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对
6.清空字典xiaoming_dict.clear()将该字典中所有键值对清空7.字典的遍历for k in xiaoming_dict:        执行代码        print("%s-%s" % (k,xiaoming_dict[k]))#k表示每一次循环中,获取的键值对的key#打印输出每一个键值对内容,输出顺序无序
实际开发中,由于字典保存数据类型不同,遍历使用不多
应用场景:四、字符串(string)定义用一对单引号''或者一对双引号""定义,表示文本数据类型hello_str = "hello hello"字符串常用操作1.统计字符串长度len(hello_str)返回该字符串的长度112.统计某一个子字符串出现的次数hello_str.count("llo")返回子字符串"llo"出现的次数2
如果需要统计的"llo"字符串不存在,将返回数值0
3.某一个子字符串出现的位置hello_str.index("llo")返回子字符串第一次出现的位置索引2
如果查找的子字符串不存在,则会报错
字符串操作方法整理1) 判断类型 - 9
方法
说明

string.isspace()如果 string 中只包含空格(空白字符\t\n\r),则返回 True
string.isalnum()如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True
string.isalpha()如果 string 至少有一个字符并且所有字符都是字母则返回 True
string.isdecimal()如果 string 只包含数字则返回 True,全角数字(程序开发中常用该方法)
string.isdigit()如果 string 只包含数字则返回 True,全角数字、unicode字符串:⑴、\u00b2
string.isnumeric()如果 string 只包含数字则返回 True,全角数字,unicode字符串:⑴、\u00b2 汉字数字
string.istitle()如果 string 是标题化的(每个单词的首字母大写)则返回 True
string.islower()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True
string.isupper()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True2) 查找和替换 - 7
方法
说明

string.startswith(str)检查字符串是否是以 str 开头,是则返回 True
string.endswith(str)检查字符串是否是以 str 结束,是则返回 True
string.find(str, start=0, end=len(string))检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1
string.rfind(str, start=0, end=len(string))类似于 find(),不过是从右边开始查找
string.index(str, start=0, end=len(string))跟 find() 方法类似,不过如果 str 不在 string 会报错
string.rindex(str, start=0, end=len(string))类似于 index(),不过是从右边开始
string.replace(old_str, new_str, num=string.count(old))把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次3) 大小写转换 - 5
方法
说明

string.capitalize()把字符串的第一个字符大写
string.title()把字符串的每个单词首字母大写
string.lower()转换 string 中所有大写字符为小写
string.upper()转换 string 中的小写字母为大写
string.swapcase()翻转 string 中的大小写4) 文本对齐 - 3
方法
说明

string.ljust(width)返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.rjust(width)返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.center(width)返回一个原字符串居中,并使用空格填充至长度 width 的新字符串5) 去除空白字符 - 3
方法
说明

string.lstrip()截掉 string 左边(开始)的空白字符
string.rstrip()截掉 string 右边(末尾)的空白字符
string.strip()截掉 string 左右两边的空白字符6) 拆分和连接 - 5
方法
说明

string.partition(str)把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面)
string.rpartition(str)类似于 partition() 方法,不过是从右边开始查找
string.split(str="", num)以 str 为分隔符拆分 string,str 默认为 '\r', '\t', '\n' 和空格。如果 num 有指定值,则分割num次,形成 num + 1 个子字符串。
string.splitlines()按照行('\r', '\n', '\r\n')分隔,返回一个包含各行作为元素的列表
string.join(seq)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串字符串的切片
切片使用索引值来限定范围,从一个大的字符串中切出小的字符串
切片语法:字符串[开始索引:结束索引:步长]
注意:
索引的顺序和倒序五、公共方法1.Python 内置函数
Python 包含了以下内置函数:
函数
描述
备注

len(item)计算容器中元素个数
del(item)删除变量del 有两种方式(1.del 关键字方式;2.以函数的方式)效果一样
max(item)返回容器中元素最大值如果是字典,只针对 key 比较
min(item)返回容器中元素最小值如果是字典,只针对 key 比较
注意
2.切片
描述
Python 表达式
结果
支持的数据类型

切片
"0123456789"[::-2]"97531"字符串、列表、元组3.运算符
运算符
Python 表达式
结果
描述
支持的数据类型

+
[1, 2] + [3, 4][1, 2, 3, 4]合并字符串、列表、元组
*
["Hi!"] * 4['Hi!', 'Hi!', 'Hi!', 'Hi!']重复字符串、列表、元组
in
3 in (1, 2, 3)True元素是否存在字符串、列表、元组、字典
not in
4 not in (1, 2, 3)True元素是否不存在字符串、列表、元组、字典
> >= == < <=
(1, 2, 3) < (2, 2, 3)True元素比较字符串、列表、元组
注意
成员运算符
成员运算符用于 测试 序列中是否包含指定的 成员
运算符
描述
实例

in如果在指定的序列中找到值返回 True,否则返回 False3 in (1, 2, 3) 返回 True
not in如果在指定的序列中没有找到值返回 True,否则返回 False3 not in (1, 2, 3) 返回 False
注意:在对 字典 操作时,判断的是 字典的键
4.完整的 for 循环语法for 变量 in 集合:    循环体代码else:    没有通过 break 退出循环,循环结束后,会执行的代码    (统一执行一次!)应用场景




students = [
    {"name": "阿土",     "age": 20,     "gender": True,     "height": 1.7,     "weight": 75.0},    {"name": "小美",     "age": 19,     "gender": False,     "height": 1.6,     "weight": 45.0},]find_name = "阿土"for stu_dict in students:    print(stu_dict)    # 判断当前遍历的字典中姓名是否为find_name    if stu_dict["name"] == find_name:        print("找到了")        # 如果已经找到,直接退出循环,就不需要再对后续的数据进行比较        breakelse:    print("没有找到")print("循环结束")










作者: 小浙姐姐    时间: 2018-6-7 16:15
加油啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2