python 字符串内使用变量且能正常执行?

大家好,为大家带来python中核心知识的讲解,不讲最基础的语法,这个大家都能轻松学会,不耽误时间,只有干货。

查看当前作用域内的所有变量

注:help函数用来查看帮助或运行时信息

自动化内存管理和引用计数

每个对象会记录有几个变量引用自身,当引用的数量为0时此对象被销毁,此种自动化内存管理的方式叫引用计数。

is的作用:判断两个对象是否是同一个对象(比较内存中的地址),当是同一个对象返回True,否则返回False, is not 的作用与 is相反

CPython 中 整数 -5 至 256永远存在于小整数对象池中,不会释放并可重复使用

作用:返回一个对象在内存中的地址

bool(x)用于显示获取x的布尔值

列表推导式是用可迭代对象创建列表的表达式

  • 作用:用简易方法生成列表
  • # 生成一个数值为1~9的平方的列表
     
  • #将列表[10, 20, 30] 中的元素与列表[1,2,3]元素分别相加,将得到的元素放于一个列表中
     
  • 2. 已知有一个字符串: 将其转化为列表,列表的内部是整数

是用可迭代对象生成字典的表达式

  • {键表达式 : 值表达式 for 变量 in 可迭代对象[if 真值表达式]}
    注: []表示其中的内容可省略
  • # 生成一个字典,键为数字 1 ~ 9,值为键的平方
     
  • 作用:返回一个可迭代对象,此可迭代对象用函数func对可迭代对象iterable中的每一个元素作为参数计算后得新的数据
  • # 此示例示意map函数的使用
     
    • 筛选可迭代对象iterable 中的数据,返回一个可迭代对象,此可迭代对象只返回iterable中符合条件的数据
    • function将对iterbale中提供的每个数据进行求布尔值,如果为True则保留,否则为False 丢弃数据
  • # 将1-20的偶数用filter生成可迭代对象后,将可迭代对象生成的数据存于列表中
     
  • 用filter 函数将1-100之间的所有素数存在列表中
  • 将原可迭代对象的数据进行排序,生成排序后的列表
  • 【key函数】是用来提供一个值,这个值将作为排序的依据,如果不给出key函数,则用
    原数据的值进行比较和排序
    reverse 标志用来设置是否降序排序
  • 排序的依据为字符串的反序

装饰器是一个函数,主要作用是用来包装另一个函数或类
包装的目的是在不改变原函数(或类名)的情况下改变被包装对象的行为

是指装饰器是一个函数,传入的是一个函数,返回的是一个函数

  • def 装饰器函数名(参数):
     
  • 被装饰器函数的变量(函数名)绑定装饰器函数调用后的返回的函数
  •  # 此示例示意装饰器函数的定义和调用装饰器原理
    # 上述 mydeco的原理是在 def myfun语句调用之后加了一条如下语句
     
  • # 此示例示意装饰器函数用来包装被装束函数
     fn() # 被调用被装饰函数
    # 上述 mydeco的原理是在 def myfun语句调用之后加了一条如下语句
     
  • # 此示例示意装饰器的应用场合及功能
     print('正在进行权限验证。。。')
     

函数内第一次未赋值给任何变量的字符串是此函数的文档字符串

  • '''函数文档字符串'''
  • 1. 文档字符串通常用来说明函数功能和使用方法
    2. 在交互模式下,输入:
    3. 函数的文档字符串绑定在函数的__doc__属性上

__doc__属性用于记录文档字符串

__name__属性用于记录函数名

  • 迭代器是访问可迭代对象的工具
  • 迭代器是指用iter(obj)函数返回的对象(实例)
  • 迭代器可以用next(it)函数获取可迭代对象的数据
从可迭代对象中返回一个迭代器,iterable 必须是能提供一个迭代器的对象 从迭代器iterable中获取下一个记录,如果无法获取下一条记录,则触发StopIteration 异常 1. 迭代器只能往前取值,不会后退 2. 用iter 函数可以返回一个可迭代对象的迭代器

用迭代器可以依次访问可迭代对象的数据

# 以下用迭代器来访问 用for语句来遍历所有元素如下 将for语句改写为while语句和迭代器实现

生成器是能够动态提供数据的对象,生成器对象也是可迭代对象(实例)

含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象
yield 翻译为(产生或生成)

yield 用于 def 函数中,目的是将此函数作为生成器函数使用
# 生成器函数只有在next(it) 函数调用时才会执行,且遇到yield后返回相应的值给next(it)函数
 
# 用生成器函数来生成一些列的整数, 0 - n
 
 

生成器表达式和列表推导式的区别

 
 
 
 # 以下是生成器表达式
 
 
 
 # 生成器表达式是现用现生成,列表推导式一次性生成静态数据
 
生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象,通常用来动态生成数据
生成器函数调用return 语句会触发一个StopIteration 异常
练习
写一个生成器函数,myeven(start, stop)用来生成start开始带stop结束(不包含)的偶数
 (表达式 for 变量 in 可迭代对象 [if 真值表达式])
 用推导式形式创建一个新的生成器
 
1) 写一个生成器函数,让此函数能够动态提供数据,数据为原列表数字的平方加1 2) 写一个生成器表达式,让此表达式能够动态提供数据,数据为原列表数字的平方加1 3) 生成一个列表,此列表内的数据是原列表数据的平方加1

作用是生成一个个性化的可迭代对象

返回一个zip对象,此对象用于生成元组,此元组的每个数据来源于参数中的可迭代对象,当最小的可迭代对象不再提供数据时迭代结束# 既能得到索引又能得到值
写一个程序,读入任意行文字,当输入空行时结束,打印带有行号的输入的结果
 
 
 
迭代器协议是指对象能够使用next()函数获取下一项数据,在没有下一项数据时触发一个StopIteration异常来终止迭代的约定
 注: 此方法需要实现迭代器协议
# 此示例示意将自定义的类MyList创建的对象制作为可迭代对象
 '''这是一个自定义的列表类型,此类型的对象用data属性绑定的列表来存储数据'''
 '''此方法用来返回一个能访问self对象'''
 '''此方法用来返回一个能访问self对象迭代器'''
 '''此类用来描述能够访问MyList类型的对象的迭代器'''
 '''此方法用来实现迭代器协议'''
 
 
 
浅拷贝是指在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程
 
复制对象及对象关联的对象一起复制过程叫深拷贝
 
  • S.split(sep=None) 将字符串,使用 sep作用分隔符分割S字符串,返回分割后的字符串列表,当不给定参数时,用空白字符作为分隔符分割
  • S.join(iterable) 用可迭代对象中的字符串,返回一个中间用S进行分隔的字符串
 
 
 
 
返回所有属性的字符串列表

with 语句深层次讲解

 
 使用于对资源进行访问的场合,确保使用过程中不管是否发生异常都会执行必须"清理"的操作,并释放资源
 文件打开后自动关闭,线程中锁的自动获取和释放等
 as 字句中的变量用于绑定表达式执行后生成的对象
 with 语句并不会改变异常的状态
2. 能够使用with语句进行管理的对象必须是环境管理器 3. __enter__ 方法将在进入with语句时被调用,由as变量绑定返回的对象 4. __exit__ 方法将在离开with语句时被自动调用,且可以通过参数来判断离开with语句时是否有异常发生 '''此类对象可以用于with语句进行管理''' exc_val 用来绑定错误对象,当内有发生异常时绑定None print('您已离开with语句, 离开时没有发生任何异常')

1、Python 安装扩展库常用的是工具。(pip)

2、Python 标准库math 中用来计算平方根的函数是。(sqrt)

3、Python 程序文件扩展名主要有和两种,其中后者常用于GUI 程序。(py、pyw)

4、Python 源代码程序编译后的文件扩展名为。(pyc)

5、使用pip 工具升级科学计算扩展库numpy 的完整命令是

6、使用pip 工具查看当前已安装的Python 扩展库的完整命令是

7、在IDLE 交互模式中浏览上一条语句的快捷键是。(Alt+P)

8、使用pip 工具查看当前已安装Python 扩展库列表的完整命令是。(pip list)

10、列表、元组、字符串是Python 的(有序?无序)序列。(有序)

11、查看变量类型的Python 内置函数是。(type())

12、查看变量内存地址的Python 内置函数是。(id())

13、以3 为实部4 为虚部,Python 复数的表达形式为或。(3+4j、3+4J)

14、Python 运算符中用来计算整商的是。(//)

15、Python 运算符中用来计算集合并集的是。(|)

16、使用运算符测试集合包含集合A 是否为集合B 的真子集的表达式可以写作

20、已知x = 3,那么执行语句x += 6 之后,x 的值为。(9)

22、已知x = 3,那么执行语句x *= 6 之后,x 的值为。(18)

python自己添加了些全局变量

#__doc__ 包含py文件的注释,文件的注释在——文件内容的最上面用三引号引起来
#__package__ 对于单读文件的package是没有意义的,代表当前的py文件在哪几个文件夹下
#__cached__ 缓存,对于py文件是可以设置一个缓存的,python2里没有,了解即可
# 因为程序的入口文件就是用户当前执行的文件,所以以后写主程序文件的时候
 #防止其他文件导入该文件时,执行主函数

值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。

引用传递:也称地址传递,在方法调用时,实际上是把参数的引用(传的是地址,而不是参数的值)传递给方法中对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

Python中,数字、字符或者元组等不可变对象类型都属于值传递,而字典dict或者列表list等可变对象类型属于引用传递

如果要想修改新赋值后原对象不变,则需要用到python的copy模块,即对象拷贝。对象拷贝又包含浅拷贝和深拷贝。下面用例子来说明

l2.append(4)   #因为浅拷贝之拷贝第一层,所以对第一层操作不会影响l1 l2[0].append(5)   #因为浅拷贝只拷贝的第一层,所以对第二层的操作还是值传递,所以l1和l2中都有列表的第一个元素都会添加一个5
print(l3) #深拷贝全部拷贝,所以只是l3的值变了,l1并没有改变

从上例可以看出,copy.copy属于浅拷贝,拷贝的是第一层list,而copy.deepcopy属于深拷贝,对list所有子元素都进行深拷贝。  

Python的字符串格式化有两种方式: 百分号方式、format方式

百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存。

    • +       右对齐;正数前加正好,负数前加负号;只有这个会在输出后给整数加上正号(+)
    • 空格    右对齐;正数前加空格,负数前加负号;
  • s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
  • r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
  • o,将整数转换成 八  进制表示,并将其格式化到指定位置
  • x,将整数转换成十六进制表示,并将其格式化到指定位置
  • d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
  • e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
  • E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
  • f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
  • g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
  • G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
  • %,当字符串中存在格式化标志时,需要用 %%表示一个百分号

注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式

#flags和width一般放到一起用,一般用不到
    • >,内容右对齐(默认)
    • =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
    • +,正号加正,负号加负;
    •  -,正号不变,负号加负;
    • 空格 ,正号空格,负号加负;
    • 传入” 字符串类型 “的参数
      • s,格式化字符串类型数据
      • 空白,未指定类型,则默认是None,同s
    • 传入“ 整数类型 ”的参数
      • b,将10进制整数自动转换成2进制表示然后格式化
      • c,将10进制整数自动转换为其对应的unicode字符
      • o,将10进制整数自动转换成8进制表示然后格式化;
      • x,将10进制整数自动转换成16进制表示然后格式化(小写x)
      • X,将10进制整数自动转换成16进制表示然后格式化(大写X)
    • 传入“ 浮点型或小数类型 ”的参数
      • e, 转换为科学计数法(小写e)表示,然后格式化;
      • E, 转换为科学计数法(大写E)表示,然后格式化;
      • f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
      • F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
      • g, 自动在e和f中切换
      • G, 自动在E和F中切换
      • %,显示百分比(默认显示小数点后6位)
#第一个0表示拿第几个元素 #分别接收字符串、数字和浮点数
# 先到 for x in range(10) 取元素,再把取出来的元素按照 前面的内容(x,x+1,x*2) 进行操作,然后把结果依次放到列表中
a,b = t #值和变量的个数要相同,否则会报错
#把列表生成式的中括号,改成小括号,就变成了一个生成器
#输出的是一个生成器对象,所有的值压根就没有被创建出来(重点)
之前的列表生成式生成了10个值,就相当于10盘菜,已经做出来了,想什么时候成就什么时候吃,想什么时候调动就什么时候调用,想吃第几道就吃第几道。
生成器就相当于,厨师脑子里的10道菜,想吃的时候才做出来,你不吃就不会做出来,只能按顺序吃(0,1...8,9),不能隔着吃,也不能倒着吃

方法二:yield方式

func() #不会执行函数,此时func()是一个生成器对象
#b.send('ciri') 会报错,因为第一次进来,执行到到yield就冻结了,出去了,所以第一次不知道给谁赋值,所以就不能用send传参数
print("老子开始准备做包子了")

生成器都是迭代器,迭代器不一定是生成器 

#iter方法就做一件事情,返回了一个迭代器对象

  满足两个条件:1.有iter方法  2.有next方法

for循环后面加的是什么?

  现象上——能进行 for循环的,都是可迭代对象
  本质上——内部有iter方法的,就是可迭代对象

补充:for循环 执行时的内部操作三件事

  1.  调用可迭代对象的iter方法,返回一个迭代器对象
for i in f(): #这里的f就是一个可迭代对象,节省内存空间

练习:使用文件读取,找出文件中最长的行

Python的字符串格式化有两种方式: 百分号方式、format方式

百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存。

我要回帖

更多关于 break跳出循环后面的代码还执行吗 的文章

 

随机推荐