后端开发 python等 零基础,手把手教会_python前后端

Python (66) 2023-03-24 16:06

本节是第五讲的第二小节,上节为大家介绍了Python发展历程、安装、以及开发工具IDLE的使用等,本节将为大家介绍Python语言的特点,共有8大特点(要素),帮助大家快速了解Python语言。由于内容较多,分为上、下两部分展示。

控制流语句(Control Flow Statements)#要素5

在Python中,一块代码,也就是说一条或多条语句组成的序列,称为suite。由于 Python中的某些语法要求存在一个suite, Python就提供了关键字pass, pass实际上是 一条空语句,不进行任何操作,可以用在需要suite (或者需要指明我们已经考虑了特殊情况)但又不需要进行处理的地方。

if boolean_expression1:

suite1

elif boolean_expression2:

suite2

......

elif boolean_expressionN:

suiteN

else:

else_suite

与if语句对应的可以有0个或多个elif分支,最后的else分支是可选的。如果需要考虑某个特定的情况,但又不需要在这种情况发生时进行处理,那么可以使用pass 作为该分支的suite。对习惯于C++或Java语法的程序员而言,第一个突出的差别是这里没有圆括号与方括号,另一个需要注意到的情况是冒号的使用,冒号是上面语法中的一个组成部分,但是最初使用时容易忘记。冒号与else、elif一起使用,实质上在后面要跟随suite的任意地方也需要使用。

与大多数其他程序设计语言不同的是,Python使用缩排来标识其块结构。由于suite是使用缩排指明的,因此很自然地带来的一个问题是:使用哪种缩排? Python风格指南建议的是每层缩排4个空格,并且只有空格(没有制表符)。大多数现代的文本编辑器可设置为自动处理这一问题(IDLE的编辑器当然也是如此,大多数其他可以感知Python代码的编辑器也是如此)。

while boolean_expression:

suite

while语句用于0次或多次执行某个suite,循环执行的次数取决于while循环中布尔表达式的状态,下面给出其语法格式:

while True:

item =get_next_item()

if not item:

break

process_Item(item)

break语句的作用是将控制流导向到break所在的最内层循环也就是说跳出循环;continue语句的作用是将控制流导向到循环起始处。

for variable in iterable:

suite

countries = ["Denmark", "Finland", "Norway”, "Sweden"]

for country in countries:

print(country)

Python的for循环语句重用了关键字in (在其他上下文中,in是一个成员操作符), 并使用如下的语法格式。与while循环类似,for循环也支持break语句与continue语句。variable将逐一引用iterable中的每个对象,iterable是可以迭代的任意数据类型, 包括字符串(此时的迭代是逐个字符进行)、列表、元组以及Python的其他组合数据 类型。

Python的很多函数与方法都会产生异常,并将其作为发生错误或重要事件的标志。 与Python的其他对象一样,异常也是一个对象,转换为字符串时(比如,打印时), 异常会产生一条消息文本。异常处理的简单语法格式如下:

try:

try_suite

except exception1 as variable1:

exception_suite1

......

except exceptionN as variableN:

exception_suiteN

要注意的是,as variable部分是可选的。我们可以只关心产生了某个特定的异常, 而不关心其具体的消息文本。

异常处理以如下的逻辑工作:如果try块中的suite都正常执行,而没有产生异常, 则except模块将被跳过;如果try块中产生了异常,则控制流会立即转向第一个与该异常匹配的suite—这意味着,跟随在产生异常的语句后面的suite中的语句将不再执行;如果发生了异常,并且给定了 as variable部分,则在异常处理suite内部variable引用的是异常对象。

如果异常发生在处理except块时,或者某个异常不能与任何一个except块匹配,Python就会在下一个封闭范围内搜索一个匹配的except块。对合适的异常处理模块的搜索是向外扩展的,并可以延展到调用栈内,直到发现一个匹配的异常处理模块,或者找不到匹配的模块,这种情况下,程序将终止,并留下一个未处理的异常,此时, Python会打印回溯信息以及异常的消息文本。

s = input(“enter an integer: “)

try:

i = int(s)

print(“valid integer entered:”, i)

except ValueError as err:

print(err)

'''

如果用户输入的是3.5,那么输出为:

invalid literal for int() with base 10: '3.5'

但是如果用户输入的是13,那么输出为:

valid integer entered: 13

'''

算术操作符(Arithmetic Operators)#要素6

Python提供了完整的算术运算符集,包括用于基本四则数学运算的操作符+、-、 *、/此外,很多Python数据类型可以使用一些增强的赋值操作符,比如+=与*=。在操作数都是整数时,+、-、*等操作符可以分别按正常的加法、减法、乘法进行运算。要注意的是,像大多数程序设计语言一样,在Python中,-号既可以作为单值操作符(否定),也可以作为二元操作符(减法),Python与一般程序语言不同的地方在于对除法的处理,除法操作符会产生一个浮点值,而不是一个整数值;很多其他程序设计语言都是 产生一个整数值,并剥离掉小数部分。如果需要产生一个整数值结果,我们可以使用 int()进行转换(或使用剥离操作符//,后面会进行讨论)

>>> 12 / 3

4.0

>>> 3 / 2

1.5

>>> a = 5

>>> a

5

>>> a += 8

>>> a

13

第一点需要记住的是,int数据类型是固定的——也就是说,一旦赋值,就不能改变,因此,对固定的对象使用增强的赋值操作符时,实际上是创建一个对象来存储结果,之后,目标对象引用重新绑定,以便引用上面创建的结果对象,而不再引用以前的对象。根据这一原理,前面的例子中,在执行到a+=8语句时,Python会计算a+8, 将所得结果存储到新的int对象,之后将a重新绑定为引用这个新的int对象(如果a 正在引用的原始对象没有其他的对象引用,就会进入垃圾收集流程)。

第二个微妙之处在于,a operator b与a = a operator b并不完全一致。前者只查询一次a的值,因而具有更快的可能性。此外,如果a是一个复杂的表达式(例如,列表元素的索引位置计算,如items[offset +index]),那么使用增强的赋值操作符时后者较少出错。这是因为,如果计算过程需要改变,那么维护者只需要改变一次,而不是两次。

Python重载(对不同的数据类型进行重用)了操作符+与将其分别用于字符串与列表,前者表示连接,后者表示追加字符串并扩展(追加另一个字符串)列表:

>>> name = 'John"

>>> name + "Doe"

'JohnDoe'

>>> name += " Doe"

>>> name

'John Doe'

>>> seeds =[“sesame”, "sunflower"]

>>> seeds += ["pumpkin"]

>>> seeds

['sesame', 'sunflower', 'pumpkin']

由于列表是可变的,使用+=后,原始的列表对象会被修改,因此,没有必要对seeds进行重新绑定。

既然Python语法聪明地隐藏了可变的与固定的数据类型的区别,为什么还需要规定这两种数据类型?原因最可能还是在于性能。在实现上,固定的数据类型具有比可变的数据类型更加高效的潜力(因为这些固定的数据类型从不改变)。此外,有些组合 数据类型(比如集合)只能操纵固定的数据类型。另一方面,可变的数据类型使用起来更加方便。

#列表+=操作符右边的操作数必须是一个iterable,如果不是,就会产生意外

>>> seeds += 5

Traceback (most recent call last):

TypeError: 'int' object is not iterable

#对列表进行扩展的正确方法是使用iterable对象,例如

>>> seeds += [5]

>>> seeds

['sesame', 'sunflower', 'pumpkin', 5]

>>> seeds = ["sesame", "sunflower", “pumpkin”]

>>> seeds += "durian"

>>> seeds

['sesame', 'sunflower', 'pumpkin', 'd','u','r','i','a','n']

列表的+=操作符会扩展列表,并将给定的iterable中的每一项追加到列表后。由于字符串是一个iterable,这会导致字符串中的每个字符被单独添加。如果我们使用 append()方法,那么该参数总是以单独的项目添加。

输入/输出(Input/Output)#要素7

Python提供了内置的input()函数,用于接收来自用户的输入。这一函数需要一个可选的字符串参数(并将其在控制台上打印),之后等待用户输入响应信息或按Enter键(或 Return键)来终止。如果用户不输入任何文本,而只是按Enter键,那么input()函数会返回一个空字符串;否则,会返回一个包含了用户输入内容的字符串,而没有任何行终止符。

print("Type integers, each followed by Enter; or just Enter to finish")

total = 0

count = 0

while True:

line = input("integer:")

if line:

try:

number = int(line)

except ValueError as err:

print(err)

continue

total += number

count += 1

else:

break

if count:

print("count =", count, "total =", total, "mean =", total / count)

以下为该程序的运行情况:

Type integers, each followed by Enter; or just Enter to finish

number: 12

number: 7

number: lx

invalid literal for int() with base 10: 'lx'

number: 15

number: 5

number:

count = 4 total = 39 mean = 9.75

尽管这一程序很短,但是程序鲁棒性很好。如果用户输入的是无法转换为整数的字符串,那么这一问题会被异常处理流程捕捉,并打印一条相关信息,之后程序流程转向到循环的开始处(“继续循环")。最后一个if语句的作用是:如果用户不输入任何数值,那么摘要不会输出,并且被0除也会避免。

函数的创建及调用(Creating and Calling Functions)#要素8

Python提供了一种将多个suites封装为函数的途径,函数就可以参数化,并通过传递不同的参数来调用。下面给出的是用于创建函数的通常语法格式:

def functionName(arguments):

suite

这里,arguments是可选的;如果有多个参数,就必须使用逗号进行分隔。每个 Python函数有一个返回值,默认情况下为None,除非我们使用语法return value来从函数返回,此时value是实际的返回值。返回值可以是仅仅一个值,也可以是一组值。 调用者可以忽略返回值,并简单地将其丢弃。

要注意的是,def是一条与赋值操作符工作方式类似的语句。执行def时,会创建 一个函数对象,同时创建一个带有指定名的对象引用(引用该函数对象)。由于函数也是对象,因此可以存储在组合数据类型中,并作为参数传递给其他函数,后续章节中将展示这一点。

在编写交互式的控制台应用程序时,一个频繁的需求是从用户处获取整数,下面 给出了一个完成这一功能的函数:

def getint(msg):

while True:

try:

i = int(input(msg))

return i

except ValueError as err:

print(err)

age = getint("enter your age:")

这个函数有一个参数msg,在while循环内部,用户被要求输入一个整数,如果输入无效,则会产生一个ValueError异常,并打印错误消息,同时循环也将迭代进行。 输入有效的整数后,会返回给调用者。

Python模块实际上就是包含Python代码的.py文件,比如自定义函数与类(自定义数据类型)的定义,有时候还包括变量等。要使用某个模块内的函数功能,必须先导入该模块,例如:import sys

要导入一个模块,必须使用inport语句,其后跟随.py文件名,但是不需要写出该扩展名导入一个模块后,就可以访问其内部包含的任意函数、类以及变量。例如: print(sys.argv)

sys模块提供了 argv变量——该变量实际上是一个列表,其首项为该程序的名称, 第二个参数及后续的参数为该程序的命令行参数。前面两行构成了完整的echoargs.py 程序。如果在命令行中以echoargs.py -v命令调用该程序,就会在控制台上打印 ['echoargs.py', '-v']。(在 UNIX 上,第一条目应该是/echoargs.py')

通常,使用模块中函数的语法格式为moduleName.fimctionName(arguments)。其中使用了我们在要素3中介绍的点(“存取属性”)操作符。标准模块的模块名都是小写字母,因此,一些程序员为自己编写的模块使用首字母大写的名(比如,MyModule),以便区别于标准模块。

下面看一个实例,random模块(在标准库的random.py文件中)提供了很多有用的函数:

import random

x = random.randint(1, 6)

y = random.choice(["apple", "banana", "cherry", "durian"])

在这些语句执行之后,x将包含一个1〜6之间(包含边界值)的一个整数,y将包含传递给random.choice。函数的列表之间的一个字符串。

常规的做法是将所有import语句放在.py文件的起始处,建议程序员首先导入标准库模块,之后导入第三方库模块,最后才导入自己编写的模块。

以上内容部分摘自视频课程05后端编程Python-2快速了解(下),更多实操示例请参照视频讲解。跟着张员外讲编程,学习更轻松,不花钱还能学习真本领。

后端开发 python等 零基础,手把手教会_python前后端_https://bianchenghao6.com/blog_Python_第1张

发表回复