优秀的编程知识分享平台

网站首页 > 技术文章 正文

Python自学教程|3万字详解每个重要知识点(2)

nanyue 2024-11-15 22:53:20 技术文章 2 ℃

20.按位运算符

在处理二进制数时,我们需要按位运算符来操作它们。二进制数是零和一,它们被称为位。








































a = 1   # binary equivalent of 1 is  1  b = 2   # binary equivalent of 2 is 10  
# In case of AND(&) operation, if both bits are 1, set result to one  # in our case, two corresponding bits are not 1  # so, corresponding result is 0  print(a & b)  
# OR operation (|), gives 1 if either operands are 1  # The reult of 0 and 1 is 1, 1 and 0 is 1  # hence, a | b gives binary 11 or decimal equivalent of 3  print(a | b)  

# XOR (^) returns 1 if only one of the operands is 1  # 1 ^ 1 = 0, 0 ^ 0 = 0, 1 ^ 0 = 1, 0 ^ 1 = 1  # considering a and b, they have only ones in each bit position  print(a ^ b)  
# NOT operation negates the bit value  # NOT 0 = 1, NOT 1 = 0  # while negating b, all preceeding zeros are turned to one  # this leads to a negative number  print(~ b)  

# zero fill left shift (<<)  # zeros are filled from right, bits are shifted to left  # left most bits fall off  # in this example, we shift the bits of b twice  # 10 (b) shifted twice is 1000 (which is decimal 8)  print(b << 2)  

# signed right shift (>>)  # shift the bits to the right, copy leftmost bits to the right  # right most bits fall off  # when we shift b (10) once to the right, it becomes 1  print(b >> 1)

21.拉姆达

前面我们看到了函数定义和函数调用。Lambda是匿名的小函数。Lambda的主体只能有一个表达式。Lambda可以接受任意数量的参数。










# a lambda function with the name growth is created  # it takes one argument and increase it by 2  growth = lambda givenLength : givenLength + 2  print(growth(25))  # prints 27  Let us take another example with many parameters:# lambda with the name area is created  # two parameters are passed, who area is calculated  area = lambda length, breadth: length * breadthprint(area(4, 7))  # prints 28

当嵌套在另一个函数中时,lambda很有用。函数成为创建函数的模板。













# the growth lambda we wrote earlier  def growth(n):      return lambda a : a + n  
# create a function that would increase by 2  strechTwo = growth(2)  
# create a function that would increase by 3  strechThree = growth(3)  
print(strechTwo(7))  print(strechThree(7))

在上面的示例中,使用相同的函数增长,我们生成了不同的函数strechTwo和strechThree。这可以通过在growth函数中声明的lambda函数来实现。通过运行此代码,我们得到输出9和10。

22.数组

数组用于在变量中存储值列表。这是创建数组的语法。方括号用于定义列表。



fruits = ["mango", "apple", "grapes"]  print (fruits)

数组允许我们使用索引访问数组元素。索引从零开始,从零开始。




fruits = ["mango", "apple", "grapes"]  firstFruit = fruits[0]  print (firstFruit)

与访问元素类似,我们可以使用索引来修改元素。




fruits = ["mango", "apple", "grapes"]  fruits[0] = "melon"  print (fruits)

可以使用len()方法知道数组中元素的数量。



fruits = ["mango", "apple", "grapes"]  print (len(fruits))  # prints 3

for语句用于遍历数组元素。我们可以在循环内处理单个元素。





fruits = ["mango", "apple", "grapes"]  
for fruit in fruits:      print(fruit)

append()方法将新元素添加到数组的末尾。





fruits = ["mango", "apple", "grapes"]  
fruits.append("guava")  print(fruits)  

有两种方法可用于从数组中删除元素。pop()方法获取数组索引,并删除特定位置的元素(请记住元素是从零开始的)。remove()接受元素的值并将其删除。让我们看看这两种方法的作用。








fruits = ["mango", "apple", "grapes"]  
fruits.pop(1)  print(fruits)  
fruits.remove("grapes")  print(fruits)


23.班级

对象是具有属性和方法的实体。这些对象可以通过声明类来创建。类是对象的蓝图。

在此示例中,我们看到如何定义一个类,如何在该类之外创建对象以及访问该对象的属性。












# create a class with "class" keyword  class Fruit:      # a property, "name" is created      # the property is assigned with the value "mango"      name="mango"  
# let us create an object, "oneFruit" using the above class  oneFruit = Fruit()  
# the property of the object "oneFruit" is accessed like this  print(oneFruit.name)

所有类都有一个内置函数__init __()
从该类创建新对象时将调用此函数。创建对象时会自动调用此函数。

我们可以在该函数中编写有用的初始化代码,以便在对象实例化时设置变量。















# create a class with "class" keyword  class Fruit:      # define the init function      def __init__(self, name, color):          self.name = name          self.color = color  
# let us create an object, "oneFruit" using the above class  # values are passed to the class  oneFruit = Fruit("mango", "yellow")  
# the property of the object "oneFruit" is accessed like this  print(oneFruit.name)  print(oneFruit.color)

在上面的示例中,我们使用了参数“ self”。在init函数中定义了三个参数,但是我们在类调用中仅传递了两个参数。自参数会自动传递给类的方法。名称“ self”不是固定的,可以使用任何名称。它必须是第一个参数。

除了内置方法之外,该类还可以具有其他用户定义的方法。让我们在类内部创建一个makeJuice()方法。





















# create a class with "class" keyword  class Fruit:      # define the init function      def __init__(self, name, color):          self.name = name          self.color = color  
    def makeJuice(self):          print("Made " + self.name + " juice. It will be in " +               self.color + " color.")  
# let us create an object, "oneFruit" using the above class  # values are passed to the class  oneFruit = Fruit("mango", "yellow")  
# invode object's method  oneFruit.makeJuice()  
The property of the object can be modified like this:oneFruit.color = "red"

24.遗产

继承是一个概念,其中我们扩展类的功能以创建新的类。这样做有很多好处。首先是重用现有代码。

现有类具有可以重用的通用代码。该类称为父类或基类。

我们创建一个子类,该子类将从父类接收定义。

让我们考虑一个父类,车辆。它具有适合描述任何车辆的特性和方法。











lass Vehicle:      def __init__(self, make, color):          self.make = make          self.color = color  
    def display(self):          print("make= " + self.make + " color= " + self.color)  
v = Vehicle("2015", "green")  v.display()

Vehicle属性中定义了两个属性,make和color。

让我们从Vehicle类扩展一个子类Car。



























class Vehicle:      def __init__(self, make, color):          self.make = make          self.color = color  
    def display(self):          print("make= " + self.make + " color= " + self.color)  
# v = Vehicle("2015", "green")  # v.display()  
class Car(Vehicle):      def __init__(self, make, color, numOfSeats):          super().__init__(make, color)          self.numOfSeats = numOfSeats  
    def display(self):          super().display()          print("number of seats= " + str(self.numOfSeats))  
    def wipeWindshield(self):          print("turned on wiper")  
newCar = Car("2019", "orange", 5)  newCar.display()  newCar.wipeWindshield()

在此代码中有许多要注意的地方。

第12行定义了一个类Car。这是一个扩展的载具(在括号中提到)。

第13行是Car的构造函数。接受三个参数。

第14行调用父类Vehicle类的构造函数。两个参数传递给父级的构造函数。

第15行初始化一个对象属性numOfSeats。此属性属于Car,并且在Vehicle类中不存在。

第17行重新定义方法display()。在方法的代码中,将调用父方法,并且那里的代码可以表达Car对象的功能。

第21行定义了一个属于Car类的方法。

第24至26行创建一个Car对象,处理Car属性并调用各种方法。

25.迭代器

迭代器是值的容器,我们可以使用它遍历所有值。

在Python中,迭代器是实现__iter __()和__next __()的对象。

列表,元组,字典和集合是可迭代的,并实现了迭代器协议。这些容器具有用于遍历值的iter()方法。

这是一个例子。




















fruitTuple = ("mango", "apple", "grapes")  
fruitIter = iter(fruitTuple)  
print(next(fruitIter))  print(next(fruitIter))  print(next(fruitIter))  
A string can be iterated using iter() method.
fruitStr = "mango"  fruitIter = iter(fruitStr)  
print(next(fruitIter))  print(next(fruitIter))  print(next(fruitIter))  print(next(fruitIter))  print(next(fruitIter))  print(next(fruitIter)) # last call throws error

请注意,前五个next()调用将打印“ mango”的每个字符。最后的next()引发错误,指示迭代已停止。

可迭代对象可以使用for in循环进行迭代。







fruitTuple = ("mango", "apple", "grapes")  
fruitIter = iter(fruitTuple)  
for fruit in fruitTuple:      print(fruit)

我们可以创建自己的迭代器类。我们需要实现__iter __()和__next __()方法。

还记得我们在类定义中看到的__init __()吗?迭代器的方法和协议类似于该类的init。

让我们考虑一个创建迭代器的示例。迭代器是从1、2开始的斐波那契数列。






















class Fibonacci:      def __iter__(self):          # define first two numbers          self.first = 1          self.second = 2          return self  
    def __next__(self):          curr = self.first + self.second # find new number          self.first = self.second # shift the previous two numbers          self.second = curr          return curr  
fibo = Fibonacci ()  fiboIter = iter(fibo)  
print(next(fiboIter))  print(next(fiboIter))  print(next(fiboIter))  print(next(fiboIter))  print(next(fiboIter))

当第15行iter(fibo)被调用时,内部会调用__iter __()。调用next(iter)时,将调用__next __()方法来查找系列中的下一个元素。

该迭代器永无休止,因为没有终止控件。

为了防止无休止的系列,我们可以添加StopIteration语句。在__next__中,我们可以添加条件并使用StopIteration。






















class Fibonacci:      def __iter__(self):          # define first two numbers          self.first = 1          self.second = 2          return self  
    def __next__(self):          curr = self.first + self.second # find new number          if (curr <= 50):              self.first = self.second # shift the previous two numbers              self.second = curr              return curr          else:              raise StopIteration  
fibo = Fibonacci ()  fiboIter = iter(fibo)  
for f in fiboIter:      print(f)

在此示例中,我们检查斐波那契数列是否已达到50。任何大于或等于50的值都会产生错误。那将停止for循环。

26.范围

该变量仅在声明的区域中可用。这种变量声明的局限性是范围。变量或方法的范围定义了这些元素的可访问位置。







def func1():      a = 5      print(a)  
func1()  print(a)


最后一个打印语句将引发错误,因为在代码的主要部分无法访问a。

在所有位置都可以访问变量的一种方法是在全局范围内声明变量。在主级别创建的变量是全局变量,可以在函数定义中访问。








a = 5  
def func1():      print(a)  
func1()  print(a)

现在,两个打印语句都可以访问该变量。

当函数内部和外部的变量使用相同的名称时,python将它们视为两个单独的变量。









a = 5  
def func1():      a = 7      print(a)  
func1()  print(a)

如果我们更改函数内部的值,则该更改不会影响函数外部的变量。

当在函数内部定义变量时,可以使用“ global ”关键字将该变量声明为global 。








def func1():      global a      a = 10      print(a)  
func1()  print(a)

27.模组

模块是关于使用库文件的。您将创建一个具有常规功能和变量声明的python库文件。这些定义可以由另一个python文件引用。

在清单.py中定义了以下函数和值





fruits = ["mango", "apple", "grapes"]  
def countStock():      return len(fruits)

为了使用此函数和数组,我们将不得不将此库导入到主代码文件中。





import inventory  
print(inventory.countStock())  print(inventory.fruits)


第1行导入库存库。第3和第4行是在库中声明的函数和变量。

可以将库名称更改为合适的名称。在下面的代码中,我们将库名称更改为inv。此更改是我们代码的本地更改。





import inventory as inv  
print(inv.countStock())  print(inv.fruits)

我们不必从库中导入所有元素。我们可能会选择导入。在从子句用于模块的进口部分。





from  inventory import  countStock  
print(countStock())  print(fruits)


在上面的代码中,函数countStock返回预期结果。但是,水果是未定义的并且会引发错误。

python中有许多内置模块,可以在上述导入样式中使用。

28.日期

通过导入模块datetime,我们可以在python中使用日期。





import datetime  
today = datetime.datetime.now()  print(today)

我们可以打印当前日期和时间戳。

我们还可以创建具有特定日期值的日期对象。datetime对象的构造函数接受年,月和日来创建日期。





import datetime  
pastDate = datetime.datetime(2020, 2, 29)  print(pastDate)

在上述构造函数调用中,小时,分钟,秒,毫秒是可选的。默认值为零。

Datetime有一种格式化日期值的方法。datetime对象公开了strftime()方法,该方法格式化对象的日期值。Strftime()接受格式字符串作为输入,并返回格式化的输出。





import datetime  
pastDate = datetime.datetime(2020, 2, 29)  print(pastDate.strftime("%B"))

%B返回完整月份的名称。

其他格式的详细信息如表中所述。

指示描述例%一个平日,短版周五%一个平日,完整版星期五%w工作日为数字0-6,0为星期日2%d每月的一天01-3122%b月名称,简称三月%B月名称,完整版游行%m月份为数字01-1210%y年,短版,无世纪19%Y年,完整版2020年%H时间00-2315%一世00-12小时5%p上午下午下午%M分钟00-5937%S秒00-5923%F微秒000000-99999942875%zUTC偏移50%Z时区科技委%j年份的天数001-366365%U年的周数,星期日作为星期的第一天,00-5352%W年的周数,星期一作为一周的第一天,00-5352%C日期和时间的本地版本星期六2020年2月29日18:23:00%X日期的本地版本20/29/20%X当地时间13:57:00%%一个人物%

29.JSON格式

JSON代表Javascript对象表示法。它是一种文本格式,可用于交换数据和存储信息。

Python有一个称为json的内置模块来处理json数据。

可以使用json.loads()方法将json字符串解析为json数据。json.loads方法将json数据返回一个字典。








import json  
jsonStr = '{ "name" : "mango", "price" : 100, "color" : "yellow" }'  
jsonData = json.loads(jsonStr)  print(jsonData["color"])  print(jsonData)

json.dumps()用于将python对象转换为json字符串。








import json  
fruitsDictionary = { "name" : "mango", "price" : 100, "color" : "yellow" }  
jsonStr = json.dumps(fruitsDictionary)  
print(jsonStr)

我们可以缩进以提高生成的输出字符串的可读性。








import json  
fruitsDictionary = { "name" : "mango", "price" : 100, "color" : "yellow" }  
jsonStr = json.dumps(fruitsDictionary, indent=5)  
print(jsonStr)

我们可以在dumps方法中对键的顺序进行排序。








import json  
fruitsDictionary = { "name" : "mango", "price" : 100, "color" : "yellow" }  
jsonStr = json.dumps(fruitsDictionary, indent=5, sort_keys=True)  
print(jsonStr)


30.正则表达式

正则表达式是一种强大的搜索机制,其中我们有一个字符串模式,并在给定的完整字符串中查找匹配的子字符串。

导入re模块以使用regEx库功能。






import re  
givenStr = "Hello world, good morning"  outRegex = re.search("^Hello", givenStr)  print(outRegex)

outRegex是由搜索方法生成的对象。搜索在字符串的开头查找字符串Hello。

31.画中画

在模块部分,我们看到了如何将模块导入我们的代码并使用这些库中的元素。

PIP是程序包管理器,可帮助安装所需的模块。

pip install <软件包名称>

这是安装软件包的语法。这需要在命令提示符窗口中运行。

如果您的计算机中未安装pip,请从https://pypi.org/project/pip/下载

示例安装是:

点安装HTMLParser

pip卸载<软件包名称>

此命令将卸载已安装的软件包

点列表

将显示本机中安装的所有软件包。

32.尝试,除了

尝试块监视是否有块中引发任何错误。

除了块处理任何抛出的错误。

当我们不使用try andexcept时,python将抛出错误并暂停程序。通过使用try,除外,我们处理了代码中的错误并避免了代码终止。





try:      print(a)  except:      print("error occured, please check if a is defined")

这里a是未定义的。引发错误,由except块处理。

最后是一个在try和except之后执行的块。无论是否发生错误,都可以得到控制。我们可以在finally块中编写清理操作,例如关闭文件句柄。







try:      print(a)  except:      print("error occured, please check if a is defined")  finally:      print("We are here after try and except")

我们可以编写代码来引发自定义错误。抛出的错误可以通过我们的尝试进行处理,除非python引擎可以接收到该错误。





a = 0  
if a == 0:      raise Exception("cannot divide by zero")

33.用户输入

大多数程序需要从用户那里获取输入并生成输出。在python中,input()方法用于接受用户的输入。



city = input("Where do you live? ")  print("city you live is : " + city)

34.字符串格式

字符串变量可以使用format()方法进行格式化。首先创建模板字符串,并在格式化阶段附加值。




tStr = "The fruit {} is {} color."  print(tStr.format("mango", "yellow"))  print(tStr.format("apple", "red"))

您可以使用索引引用这些值。索引从零开始。




tStr = "The fruit {0} is {1} color. {0} is good for health"  print(tStr.format("mango", "yellow"))  print(tStr.format("apple", "red"))

类似于索引引用,我们可以使用参数名称。




tStr = "The fruit {name} is {color} color. {name} is good for health"  print(tStr.format(name = "mango", color = "yellow"))  print(tStr.format(name = "apple", color = "red"))

35.Python数据类型

Python支持五种标准数据类型,其中可能还包含子类型。用于定义对其可能进行的操作的数据类型以及每种数据的存储方法。

这是五种数据类型

  1. 号码
  2. 清单
  3. 元组
  4. 字典

让我们看一下所有这些数据结构,并通过示例了解如何使用它们:

号码

此数据类型存储数字值,Python在其中创建数字对象并将数字分配给变量。

例:



a = 4b = 6

这里,a和b是数字对象。

Python支持四种类型的数字数据。他们是-

  • int(有符号整数)
  • long(长整数,也可以用八进制和十六进制表示)
  • 浮点数(浮点实数值)
  • 复数(虚数以'j'表示的复数)

在长整数的情况下可以使用小写字母L,但是,应始终使用大写字母L以避免混淆。

用引号表示的字符序列称为字符串。单引号,双引号或三引号可用于在Python中定义字符串。如果需要进行字符串处理,则提供内置的运算符。这使其简单易用。

示例:“ hello” +“ python”将返回“ hello python”

运算符*称为重复运算符。“ Python” * 2操作将返回“ Python Python”

让我们看看另一个例子-







str1 ='hello javatpoint'#字符串str1   str2 ='你怎么样'#string str2   打印(str1 [0:2])#使用切片运算符打印前两个字符     打印(str1 [4])#打印字符串的第4个字符   print(str1 * 2)#打印两次字符串  打印(str1 + str2)#打印 str1和str2的串联

输出:





他  ? 你好,javatpoint你好,javatpoint你好javatpoint你好吗

清单

列表可以包含不同类型的数据,类似于C中的数组。列表中存储的项目用逗号分隔,应放在方括号[]中。

要访问列表中的数据,应使用切片[:]运算符。重复运算符(*)和串联运算符(+)在字符串和列表中的工作方式相同。

看下面的例子-







l = [1,“ hi”,“ python”,2] 打印(l [3:]) 打印(l [0:2])  打印(l) 打印(l + l)   打印(l * 3)

输出:






[2]  [1,“嗨”] [1,'hi','python',2][1,'hi','python',2,1,'hi','python',2][1,'hi','python',2,1,'hi','python',2,1,'hi','python',2]

元组

元组和列表之间有许多相似之处。元组包含不同数据类型的项目的集合,这些项目用逗号(,)分隔,并且需要用括号()括起来。

元组中项目的大小和值无法修改,因为它是只读数据结构。

让我们看一个例子-









t =(“ hi”,“ python”,2)   打印(t [1:])   打印(t [0:1])   打印(t)   打印(t + t)   打印(t * 3)    打印(type( t))  t [2] =“ hi”

输出:











('python',2)(“嗨”,)('hi','python',2)(“ hi”,“ python”,2,“ hi”,“ python”,2)('hi','python',2,'hi','python',2,'hi','python',2)<类型'tuple'>追溯(最近一次通话):<模块>中的文件“ main.py”,第8行t [2] =“ hi”;TypeError:“元组”对象不支持项目分配


字典

字典就像一个关联数组,其中每个键都存储一个特定值。它是一组有序的键值对项目。密钥能够保存任何原始数据类型。值是一个任意的Python对象。字典中的每个项目都用逗号分隔,并放在大括号{}中

让我们看下面的例子:







d = {1:'Jimmy',2:'Alex',3:'john',4:'mike'} print(“第一个名称为” + d [1]) print(“第二个名称为” + d [ 4])   打印(d)   打印(d.keys())   打印(d.values())

输出:






第一个名字是吉米第二名叫麦克{1:“吉米”,2:“亚历克斯”,3:“约翰”,4:“麦克”}[1、2、3、4]['Jimmy','Alex','john','mike']

36.流控制语句

条件语句(if-else语句)

这些命令可帮助您根据条件(例如“如果”发生特定条件)进行决策,则您必须执行一组操作,而“否则”则必须执行另一组操作。

让我们看看它是如何工作的:

首先,我们将定义一些变量并为其分配值。接下来,我们将对这些变量执行一些基本的'if''else'操作。



a = 10b = 20


如果(b> a):    打印(b大于a)

输出量


b大于a

在上面的计算中,如果条件为true,则得到输出。现在,让我们用一个错误的语句尝试'if'函数。



如果(a> b):    打印(“ a大于b”)


对于此语句,由于if条件为false,因此不会获得输出。

现在,让我们包含else语句。





如果(a> b):    打印(“ a大于b”)其他:    打印(“ b大于a”)

输出:


b大于a

接下来,让我们探索多种条件的“ elif”功能:




a = 10b = 20c = 30








如果(a> b)和(a> c):    打印(“ a是最大的”)省略号(b> a)和(b> c):    打印(“ b是最大的”)其他:    打印(“ c是最大的”)

输出:


c是最大的

您还可以在不同的数据结构(例如元组,列表,字符串等)上实现if和else函数。让我们来看一个带有列表的示例。


l1 = [10,20,30,40,50]



如果l1 [0] == 10:    l1 [0] = 10011

输出:


[100,20,30,40,50]
[100,20,30,40,50]

Tags:

最近发表
标签列表