这篇文章内容和结构还有所欠缺,在后续会持续抽空更新~
头注释像是运动或者游戏里的规则,它会把这个规则告诉解释器(帮助执行Python脚本的),解释器根据头注释里的特定的规则去执行我们的python脚本。如果脚本里面有不符合规则的地方,解释器就会报错。
卸载python脚本第一行的用#号开头表示的信息就是头注释。
# coding:utf-8
头注释不是必要的,但是在国内编程的时候要注意使用。
头注释是被系统或解释器所调用(例如:告诉python解释器在哪?脚本编码格式是哪个?)
# coding:utf-8
#是注释符号
coding:utf-8 是注释内容,是脚本执行的特殊规则,符合我们脚本业务的规则
# coding:utf-8
#定义coding则告诉系统脚本是何编码格式
#!/usr/bin/env
#定义!/,会去找指定路径下的python解释器,但是现在安装完之后都会知道解释器在哪,所以现在这个目前很少使用
自上而下,逐行执行
printf(object,end = ‘’)
object打印信息,多信息用逗号隔开;end为结尾符,默认为在打印完后的信息后空一行,这里加上后就不会换行了
print('名字是 %s,生日是 %s'% (name, birthday))
这里可以把变量name,birthday分别按顺序赋值给%s
# 这是一个单行注释
print("Hello, World!")
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
变量名用于给变量赋值使用,而关键字用于业务逻辑处理
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {}
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 \ 来实现多行语句.
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \
Python 可以在同一行中使用多条语句,语句之间使用分号 ; 分割
缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。
比较运算符:
身份运算符是比较a、b内存编号是否一样。而且<>被弃用了在Python3之后。
在python解释器里,0~255是提前被分配好内存了,所以如果定义超过255的数字,就会分配不同的内存空间。在脚本里值相同,下一次值被赋给另外一个变量,但是也是引用那个数值的内存地址。
定义:
字符串的capitalize函数
字符串的casefold和lower函数
字符串的upper函数
字符串的swapcase函数
。
字符串的zfill函数
字符串的zfill函数
字符串的count函数
字符串的startswith函数
字符串的endswith函数
字符串返回bool类型的函数:isspace、istitle、isupper、islower
join 和 split方法的使用,join将序列中的元素以指定的字符连接生成一个新的字符串,split恰好相反,拆分字符串的
字符的编码格式:gbk中文编码
ascii英文编码
utf-8 国际通用的编码格式
结果为:
74667,
123ab
字符串的转义字符:
Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。
1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
3、在Python中没有switch – case语句。
Python 中的循环语句有 for 和 while。
while 判断条件(condition):
执行语句(statements)……
如果 while 后面的条件语句为 false 时,则执行 else 的语句块。
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
Python for 循环可以遍历任何可迭代对象,如一个列表或者一个字符串。
for <variable> in <sequence>:
<statements>
else:
<statements>
1.迭代器:
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
2.创建迭代器:
把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。
如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为 init(), 它会在对象初始化的时候执行。
iter() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 next() 方法并通过 StopIteration 异常标识迭代的完成。
next() 方法(Python 2 里是 next())会返回下一个迭代器对象。
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
3.生成器:
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
1.定义函数:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号 : 起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
def 函数名(参数列表):
函数体
参数传递:
类型属于对象,变量是没有类型的;
可更改(mutable)与不可更改(immutable)对象:,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
Python 解释器能够用参数名匹配参数值。
def printinfo( name, age ):
"打印任何传入的字符串"
print ("名字: ", name)
print ("年龄: ", age)
return
#调用printinfo函数
printinfo( age=50, name="runoob" )
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
不定长参数:
加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
python使用lambda创建匿名函数,所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
lambda [arg1 [,arg2,.....argn]]:expression
lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。
匿名函数的使用场景:
可以和其他函数联合使用:map(),
map函数,函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
reduce()函数:
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(func,[1,2,3]) 等同于 func(func(1,2),3)
对于序列内所有元素进行累计操作
filter函数:filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
对于序列中的元素进行筛选,最终获取符合条件的序列
sorted函数:
sorted(iterable, /, *, key=None, reverse=False)
接收一个key函数来实现对可迭代对象进行自定义的排序
可迭代对象:主要与列表,字符串,元祖,集合和字典
key:接受一个函数,根据此函数返回的结果,进行排序
reverse:排序方向,默认为从小到大,reverse=True为逆向
Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 和 f 要求为关键字形参:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
正确使用:
f(10, 20, 30, d=40, e=50, f=60)
错误使用:
f(10, b=20, c=30, d=40, e=50, f=60) # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60) # e 必须使用关键字参数的形式
vec = [2, 4, 6]
[3*x for x in vec]
#输出为[6, 12, 18]
[[x, x**2] for x in vec]
#输出为[[2, 4], [4, 16], [6, 36]]
可以在创建矩阵列表等用到
使用 del 语句可以从一个列表中依索引而不是值来删除一个元素。这与使用 pop() 返回一个值不同。可以用 del 语句从列表中删除一个切割,或清空整个列表。
模块:把一些定义存放在一个文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。
import可以导入你的模块,如果模块在当前搜索路径中。
# 导入模块
import support
# 现在可以调用模块里包含的函数了
support.print_func("Runoob")
模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。
每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。
所以,模块的作者可以放心大胆的在模块内部使用这些全局变量,而不用担心把其他用户的全局变量搞混。
从另一个方面,当你确实知道你在做什么的话,你也可以通过 modname.itemname 这样的表示法来访问模块内的函数。
模块是可以导入其他模块的。在一个模块(或者脚本,或者其他地方)的最前面使用 import 来导入一个模块,当然这只是一个惯例,而不是强制的。被导入的模块的名称将被放入当前操作的模块的符号表中。
还有一种导入的方法,可以使用 import 直接把模块内(函数,变量的)名称导入到当前操作模块:from mod import a,b
from mod import *
这种导入的方法不会把被导入的模块的名称放在当前的字符表中。
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
每个模块都有一个__name__属性,当其值是’main’时,表明该模块自身在运行,否则是被引入。
说明: 每个模块都有一个__name__属性,当其值是’main’时,表明该模块自身在运行,否则是被引入。
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:
包是一种管理python模块命名空间的形式,采用“点模块名称”。
模块名称是A.B,那么他表示一个包A中的子模块B。
使用模块的时候,你不用担心不同模块之间的全局变量相互影响,采用点模块名称这种形式就不用担心不同库之间的模块重名的情况。
from sound.effects import echo
echo.echofilter(input, output, delay=0.7, atten=4)
从一个包中导入*:
from sound.effects import *
输出值方式:
读取键盘输入:
面向对象:
class(类):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
模块,英文名称module,扩展名为.py的文件就可以称作模块。
包,英文名称package,在模块之上的概念,为了方便管理.py模块文件进行打包,包目录下第一个文件必须是_init_.py。否则就是普通的文件夹目录,然后是一些模块文件和子目录,假如子目录中也有_init_.py,那么它就是这个包的子包了。
库,英文名称library,具有相关功能模块的集合,这也是python的特色,具有强大的标准库、第三方库以及自定义模块。