一、流程控制:if,while  ,for

1、if……else  条件判断语法:if  条件1:代码块elif 条件2:代码块……else:代码块

注:单纯的if语句里,从上到下,只要符合其中一个条件,就不会再执行下面的条件了。

2、while  无限循环

语法格式:(代码块可以是for循环或if条件判断循环,break,continu)

while  条件:代码块---------------------------while  条件成立时执行下面的代码块,不成立时执行else代码块,但一遇到break就直接退出循环,循环里的或else都不会执行:代码块else:代码块----------------------------

 1 1、第一种情况
 2 n = 1
 3 while n < 5:
 4     n +=1
 5     print(n)    -----> 2,3,4,5
 6
 7 2、第二种情况
 8 n = 1
 9 while n < 5:
10      print(n)  ------->1,2,3,4
11      n +=1
12
13 3、第三种情况
14 while  n < 5:
15     if  n == 3:
16         break
17         print(n)
18     n +=1
19 ------->什么都没有,因为n =1或2时都不符合if条件,故不会执行里面的代码
20
21 4、第四种情况 (print()缩进很重要,缩进很重要,缩进很重要!!!)
22 while  n < 5:
23     if  n == 3:
24         break
25     print(n)   --------->1,2
26     n +=1
27 等效果下面if---else
28 while  n < 5:
29     if  n == 3:
30         break
31     else:
32         print(n)
33     n +=1
34 注:if条件判断,一旦符合条件,就不会再去看其他条件了,故else也不会去执行了,只有在while或for循环中才会去执行。
35
36
37
38 5、第五种情况
39 while  n < 5:
40      print(n)
41      n +=1
42 else:
43       print("没有break直接退出程序的话,当前面条件不符合时,会打印else后的信息")
44
45 >>> 1,2,3,4
46 >>> 没有break直接退出程序的话,当前面条件不符合时,会打印else后的信息
47
48 6、第六种情况
49 while  n < 5:
50      print(n)
51      n +=1
52 else:
53       print("没有break直接退出程序的话,当前面条件不符合时,会打印else后的信息")
54 print("只要不出现死循环,不管前面程序执行如何,在while循环外的代码都会执行")
55
56 >>> 1,2,3,4
57 >>> 没有break直接退出程序的话,当前面条件不符合时,会打印else后的信息
58 >>>只要不出现死循环,不管前面程序执行如何,在while循环外的代码都会执行

while 各种情况运行结果

break 退出当前循环,如果外面还有循环,不会退出!!!

3、for ……else

语法格式:(同while循环,for循环是可控的循环,一般不作为无限循环)s = "321"
counts = 0
if counts < len(s):for i in s:print("倒数第%s秒"%(i))counts += 1else:print("出发")
else:print("这个打印是不会显示的,因为if里执行了上面的条件,下面就不会去执行的")

注意:当for循环结束后,会从上往下执行后面的代码即else,可以看作和for没有关系的另一个平行代码块

二、数据类型之间的转换

不可哈希的数据类型即可变数据类型:list、dict、set

可哈希的数据类型即不可变数据类型:int、str、tuple、bool

str  变成 list  :split(分割符)    或   list(str)  只是把每个元素放入列表中

list  变成 str  :list_str = "拼接符或空格"join(list)    或str(list) 只是外层加双引号,意义不大

 1 # str 与 list的转换
 2 # str ->list的转换1:通过 split() 方法将str改为list
 3 str01 = "china_is_my_country"
 4 str01 = str01.title()  # China_Is_My_Country
 5 str_list = str01.split("_")  # ['China', 'Is', 'My', 'Country']
 6
 7 # str ->list的转换2:通过list()方法转换的str是将一个列表会将每一个元素都切开,有时可能无法达到自己的预想,就用split(分割符)
 8 str_list0 = list(str01)
 9 # ['C', 'h', 'i', 'n', 'a', '_', 'I', 's', '_', 'M', 'y', '_', 'C', 'o', 'u', 'n', 't', 'r', 'y']
10
11 # list ->str 的转换1:通过str()方法将list转成一个整体的str包括[]及双引号等如"[1,2,3]",这种转换没有太大意义
12 # list ->str 的转换2:通过join()方法将list里每个元素拼接起来
13 lis = ["我","爱","中","国"]
14 lis_str = "_".join(lis)  # 我_爱_中_国

str与list的互转

str  通过list(str)、tuple(str)、set(str) 对象方法转换成str ,只是在外加了一层双引号,对元素操作很不方便,故这种转换没有意义

注:str 、list、tuple、set、int 无法通过dict()转换成字典,因字典是键值对成对存在的 (ValueError: dictionary update sequence element #0 has length 1; 2 is required)

注:想把str转换成int,str必须全是数字才行,不然报错

str通过对应对象方法变成  list 、tuple、set 、int  都是将str每个字符拆分迭代的放入对应数据类型中

---------------

非空字符串、列表、元组、字典、集合及非零数字转换成bool型 都为True

0,None,[],(),{},set(),False ,bytes" 转换成bool型都为 False

三、数据类型:

不可变数据类型:int、str、bool、tuple、frozenset可变数据类型:list、dict、set公共方法:count()、len()、del、copy()len(所有都有)count(数字、字典、集合没有此方法)index(数字、字典、集合没有此方法)可变数据类型都有copy()

整数、字符串、列表、元组、布尔可以相加(字典、集合不可相加)

整数:  int
# 不可变数据类型,无序
数学运算:+ - * /  //(整除) % **(幂)比较运算: >,<,>=,<=,==,!=赋值运算:=,+=,*=,/=,-=,%=,,//=,**=逻辑运算:not or and从左到右优先级:() not  and  or1(非零整数):true   0:false1 or 2  左边非零取左边,0 取右边,and相反身份运算:is  is not  判断两个对象是不是为同一个内存地址成员运算:in not in   判断字符/元素是否在目标中,str,list,dict,set,tuple位运算:&  与运算   1 1 得1 , 1 0 得0  ,0 0 得 0|  或运算   1 1 得1,1 0 得1 ,0 0 得0方法:int.bit_length()   查看数字在内存中占的字节数
布尔值:True  False#不可变数据类型、True为1,False为0   (0,None,False,[],(),{},set(),都为False)
补充:
1、int 转 float  是取整,不是四舍五入
1.1、  int(12.34)  --->12int("12.34")  ---> 报错2、  i = 1, # 注意后面的点     print(type(i))==》(1,) <class 'tuple'>

字符串: str
# 不可变数据类型、有序、可切片,可迭代循环,交互默认输入为字符串# 以单或双引号表示 :'元素'# 不可增删改
    切片:从左到右字符串中的索引从0开始[start:end:step]  顾头不顾尾[1:3] 字符串中索引1到2的字符[1:-1] -1 表示最后一个字符操作方法:del str          删除字符串len(str)         统计字符串长度,内置方法str.count(元素)  统计字符串中的元素出现的个数str.center(宽度,"填充物可不写")  指定长度居中显示,默认填充物为空格str.title()      非字母隔开的单词首字母大写,其余都变小写china coUntry --> China Country*   str.capitalize()  首字母大写,其他单词全部小写china_Country  --> China_countrystr.swapcase()    --->字符串大小写互转**  str.upper()    ----> 全部变成大写str.isupper()           是否全部为大写**  str.lower()    -----> 全部变成小写str.islower()           是否全部为小写str.encoding("将字符串以何种编码集进行编码")**  str.startswith("元素") 判断字符串是否以什么开头,返回bool值str.endswith("元素")*** str.find("元素",star,end)  找元素的索引,如果元素不存在,返回-1*** str.index("元素",star,end)   找元素的索引,如果元素不存在,报错*** str.strip("元素可空")     去掉两端的\n,\t,\s等空白字符,也可指定字符从两端删str.lstrip()str.rstrip()***** str.split("分割符可空,默认空格,多个空格看成一个")   分割字符串,返回列表str.lsplit()str.rsplit()*** str.replace(old,new,替换几次)*** str.format()  字符串格式化"{}my name is {}".format(11,"秀*")"{1}my name is {2},next year is {1}".format(11,"秀*"){id}is old boy ,my name {name}".format(id =11,name="sun")  dic = {‘id’:11,‘name’:'sun'}     {id}is old boy ,my name {name}".format(**dic)   也可以放字典% 百分号的方式格式化"my name is %s ,i am %d" %("sun",30)"
                "my name is %(name)s ,i am %(age)d" %(dic)"  可以放字典%s 字符串%d 整数%f 小数   %.2f 保留2为小数3.6以上版本格式话可以:f"{name}已经登录了"str.isalnum()  是否为字母或数字,返回bool值str.isalpha()  是否全为字母str.isdigit()  是否全为数字str.isspace()  是否有空白字符***** str.join(iterable可迭代)   字符串拼接,括号里一定得是可迭代得数据,且只能为一个参数注:"sun".join([11,22])  报错,join不能将带有数字得list转换成字符串,需要先将数字转换成字符串"*".join("%s" %id for id in list)object  in  str    判断元素是否在str中

列表:list
# 可变数据类型,有序,可切片,可迭代循环,元素可为任意类型数据# 以[元素,]表示# 可增删改查
    切片:同字符串一样,通过索引切增:list.append(元素)       向列表末尾添加元素list.insert(index,元素) 指定索引位置向列表添加元素list.extend(iterable)    迭代的向列表末尾添加多个元素删:list.pop(index)     根据索引删除,不添加索引时,默认删除最后一个list.remove(元素/object) 根据元素删除del list   删除列表del list[:3]  根据索引切片删除list.clear()  清空列表改:lis[index] = new_data    索引切片修改lis = [11,22,33,44,55]lis[:2] = [66,77,88]    # lis = [66, 77, 88, 33, 44, 55]  步长为1时,不考虑个数对应,切的时一片空间lis[:3:2] = [66,77]     # 报错,步长不为1时,左右元素个数需一致#ValueError: attempt to assign sequence of size 3 to extended slice of size 2
    查:lis[index]      通过索引查for i in list:   通过迭代循环查,i为列表中的每个元素方法:del list               删除列表len(list)             统计列表的长度list.count(object)   统计列表中指定元素出现的个数list.index(object,start,end)   查找元素的索引list.sort(reverse=False)     排序,默认为升序,当reverse值设为True时,降序排列list.reverse()      列表中元素顺序反转过来list.copy()         列表浅拷贝object in list      判断对象是否在列表中

元组:tuple
# 不可变数据类型,有序,可切片,可迭代循环,元素可以是任意数据类型# 不可增删改# 以括号表示()
    查:tuple[2]   通过切片查for i in tuple:   通过迭代循环查方法:tuple.count(object)tuple.index(object,start,end)len(tuple)object in tuple
元组单个元素,需要在后面加上一个逗号,不然python就不会认为其是一个元组类型
还有 i= 1, python也认为其为一个元组

字典:dict
# 可变数据类型,键值对存在,键不可变,可哈希的(int,str,bool,frozenset),值可以是任意数据类型,无序,不可切片,可迭代循环查询# 以大括号表示{key:value}# 可整删查
    增:dic = {}dic[new_key] = new_data    直接增加,如果key存在则更新valuedic.setdefault(key,value)  本方法一旦key,value都创建,且value指定的不是[]、{}、set(),值都不能更改new_dic = dict.fromkeys(iterable,values)new_dic = dict.fromkeys([11,22],[33,44]) -->{11: [33, 44], 22: [33, 44]}前面的key对应相同的value,且当后面的value为可变数据类型时如列表,改变任意一个value,另一个也会改变,浅拷贝,否则不改变删:dic.pop(key)    指定key删除,默认删除最后一项,返回删除key对应的value,如果key不存在报错 KeyError:dic.popitem()   随机删除 ,返回删除的键值对以tuple形式显示3.6以上字典内置为有序,popitem()默认删除最后一个,但面试要说随机删除del dic[key]    指定key删除,如果key不存在报错 KeyError:del dicdic.clear()改:dic[key] = new_datadic.update(dic1)       dic将dic1更新到自己的字典中,key重复更新为新value查:dic[key]     key不存在时,报错dic.get[key,"不存在时自定义返回值"]   key不存在时默认返回None,也可自定义返回值dic.keys()   以仿列表形式存所有key,可迭代dic.values()dic.items()for i in dic   i 为dic的key方法:len(dic)

集合:set
# 可变数据类型,无序,元素唯一不重复且可哈希即不可变数据类型,可迭代# 以{}形式表现,主要用于去重# 不可切片(无序),可增删查
    增:set.add(元素)set.update(iterable)    迭代的更新到set中删:set.pop()   随机删除set.remove(元素)  没有报错set.clear()del set改:因无序,只能通过先删除后整加的方式set.remove(待改元素)set.add(新增元素)查:for i in set:方法:len(set)交集: &     相同的部分并集: |     合体差集  a-b    去掉在a中b有的元素,减法s = frozenset([11,22,33])  将可变数据类型改为不可变

四、 深浅拷贝

浅拷贝:

1、针对的是可变数据类型:list、dict、set  ,不可变数据类型int、str、tuple、bool 是没有拷贝一说的,他们都没copy() 方法

2、浅拷贝后是在内存地址中分配了一份新的地址,且浅拷贝只拷贝了第一层,第二层不会拷贝,故第二层如果改变,原数据及浅拷贝后的数据也将改变

3、= 赋值不是浅拷贝,[:] 切片是浅拷贝

a = [11,22,[11,22]]

b = a

注:以上称为赋值,只是将a,b都指向了同一个内存地址

c = a.copy()   用的是list中的方法copy是浅拷贝,id(a)  与 id(c)  的内存地址是不同的

浅拷贝的标准写法为:

import  copy

c = copy.copy(a)

3、切片是浅拷贝

切片是浅拷贝的代码演示

深拷贝:

就是将原文件内部元素完全拷贝,不会将因为第二层元素改变,另一个也会改变

深拷贝方法:

import  copy

list_new = copy.deepcopy()

扩展:枚举函数enumerate(itertable,start)

它返回2个参数,以元组形式返回,一个是可以作为索引,一个是元素

li = [11,22,33,44]for i in enumerate(li):print(i)>>>(0, 11)
>>>(1, 22)
>>>(2, 33)
>>>(3, 44)

扩展:解构,可以通过解构在循环中直接用两个变量接收

for k,v from li:print(k,v)

基础数据类型坑你没商量:

1、range是可迭代对象,可迭代对象都可以进行切片,所有的可变数据类型都有copy方法,但此方法只是对应数据类型写的和浅拷贝类似功能的方法,而真正的浅拷贝都需要导入copy模块。

 1 # 2、L = range(100) (4分)
 2 L = range(100)
 3 # 1) 取第一到第三个元素_______
 4 '''list(L)[:3]'''  ===>list(L[:3])
 5 # 2) 取倒数第二个元素_______
 6 '''list(L)[-2]'''  ===>L[-2]
 7 # 3) 取后十个元素_______
 8 '''list(L)[-10:]'''===>list(L[-10:])
 9 # 4) 把L复制给L1用_______
10 '''L1 = L.copy()'''
11 error 我做错了 ,结论:可迭代对象都可以切片取值,range类没有copy()方法
12 L1 = L[:] or L1 = L or L1 = copy.copy(L) or L1 = copy.deepcopy()

range

2、当函数被定义时,Python的默认参数就被创建 一次,而不是每次调用函数的时候创建。 这意味着,如果您使用一个可变默认参数并改变了它,您 将会 在未来所有对此函数的 调用中改变这个对象。

 1 # 2、以下的代码的输出将是什么:___(3分)
 2 #
 3 # def extendList(val,list = []):
 4 #     list.append(val)
 5 #     return list
 6
 7 # list1 = extendList(10)  = list
 8 # list2 = extendList(123, [])
 9 # list3 = extendList(‘a’)
10
11 # print “list1 = % s” % list1
12 # print “list2 = % s” % list2
13 # print “list3 = % s” % list3
14
15 answer:
16 list1 = [10,a]
17
18 list2 = [123]
19
20 list3 = [10,a]

默认参数只创建一次,后面都引用它

- 打印进度条

import time
for i in range(0,101,2):time.sleep(0.1)char_num = i//2      #打印多少个'*'per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)print(per_str,end='', flush=True)

 
 

回到顶部

转载于:https://www.cnblogs.com/sunxiuwen/p/9149588.html

python_基础知识回顾总结相关推荐

  1. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  2. php基础知识总结大全,php基础知识回顾 —— 常量

    您现在的位置是:网站首页>>PHP>>php php基础知识回顾 -- 常量 发布时间:2019-01-23 17:23:08作者:wangjian浏览量:489点赞量:0 在 ...

  3. java知识点博客园_JAVA基础知识回顾

    JAVA基础知识回顾 一.背景介绍 JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platfo ...

  4. C语言基础知识回顾 2-三种基本机构

    C语言基础知识回顾 %超适用于计算机二级% 第二章 三种基本结构 本章回顾最基本的顺序.条件.循环语句的语法结构,对于非初学者来说,这一部分内容想必早就信手拈来. 因此,回顾的侧重点都是一些需要注意的 ...

  5. 【Java基础知识回顾篇】之打怪升级Day001

    Java基础知识回顾篇之打怪升级Day001 目录 Java基础知识回顾篇之打怪升级Day001 简介 一.为什么现在主流的是Java8和Java11? 二.简单尝试编写java程序 1.编写一个He ...

  6. Java基础知识回顾之一 ----- 基本数据类型

    前言 在开始工作至今,学习各种各样的技术之中发现自己的很多Java的基础知识都忘了⊙﹏⊙b汗... 而且越是学习越是发现Java基础的重要性,所以准备单独抽一下时间进行Java基础的重新学习.在重新学 ...

  7. 前端开发入门:html和css基础知识回顾2

    HTML+CSS基础知识 1.对WEB标准以及W3C的理解与认识 标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被 ...

  8. JavaSE基础知识回顾

    文章目录 JavaSE 一.前言 1.1.解决大家的疑惑 1.2.Java和Python的抉择 1.3.走进Java 二.预科 2.1.学习准备:博客 2.2.MarkDown 2.3.基本Dos命令 ...

  9. Java基础知识回顾之六 ----- IO流

    前言 在上一篇文章中,回顾了Java的多线程.而在本篇文章中主要介绍Java IO的相关知识. IO的介绍 什么是IO? IO的名称又来是Input与Output的缩写,也就是输入流和输出流.输入流用 ...

  10. Java基础知识回顾之四 ----- 集合List、Map和Set

    前言 在上一篇中回顾了Java的三大特性:封装.继承和多态.本篇则来介绍下集合. 集合介绍 我们在进行Java程序开发的时候,除了最常用的基础数据类型和String对象外,也经常会用到集合相关类. 集 ...

最新文章

  1. 拿到淘宝offer后的胡思乱想plus面试总结
  2. C 语言中的 strtok 调用小技巧
  3. linux下i2c设备驱动程序,Linux I2C 设备驱动
  4. Operating System-进程/线程内部通信-信号量和PV操作
  5. leetcode103JAVA_[LeetCode] 103. Binary Tree Zigzag Level Order Traversal Java
  6. 西伯利亚(Siberia)冷空气
  7. OCP大会 | 腾讯云Open DCN Networking(附PDF)
  8. cocoaPod集成9大环境以及报错项目问题
  9. C++设计模式-开放-封闭原则基本概念与实例
  10. 三个具有代表性的STL函数
  11. 专访福建移动林志云: 5G使能,运营商全面进入数字化转型之路
  12. 请检查captcha表格_【分享】工程资料这样写,再也不用担心检查组来检查资料了...
  13. C++基础::为什么不能cout一个string?
  14. Java匹马行天下之 Java国出了个Java——举国欢庆
  15. N phpspider爬虫获取网站内容demo
  16. 【Java】JavaMail发送QQ邮件邮件
  17. ARCGIS 模型 根据字段值批量导出矢量数据
  18. ISO8583包[详细说明]
  19. 【Qt】断言Q_ASSERT的使用
  20. 叠氮功能化硫铟铜量子点CuInS Qds-N3|炔基修饰碲化镉/硫化硒量子点 CdTe/CdSe Qds-Alkyne科研试剂

热门文章

  1. Masonry 在swift下的使用
  2. JavaScript随机数及随机字符串
  3. 应用程序虚拟化,序列化实验 Microsoft Desktop Optimization Pack 实现一个应用程
  4. mysql常用字符串操作函数大全,以及实例
  5. Android 应用程序获得系统权限
  6. 谷歌开源的代码评审规范,值得借鉴!
  7. 面试官:给我说说你对Java GC机制的理解?
  8. 企业API接口设计之token、timestamp、sign具体实现
  9. 不能All in的人别去创业公司
  10. QQ亿级日活跃业务后台核心技术架构揭秘