网站首页 > 技术文章 正文
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支持五种标准数据类型,其中可能还包含子类型。用于定义对其可能进行的操作的数据类型以及每种数据的存储方法。
这是五种数据类型
- 号码
- 串
- 清单
- 元组
- 字典
让我们看一下所有这些数据结构,并通过示例了解如何使用它们:
号码
此数据类型存储数字值,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]
猜你喜欢
- 2024-11-15 清理Ubuntu虚拟机磁盘空间(ubuntu虚拟机磁盘空间不足)
- 2024-11-15 在工作中 MySQL 的一些开发规范(干货)!
- 2024-11-15 MybatisPlus全套Api小解(一)(mybatis_plus)
- 2024-11-15 关于SSD存储原理的介绍(ssd硬盘存储原理)
- 2024-11-15 mysql简单的入门教程(mysql入门很简单)
- 2024-11-15 int(11) 和 int(4) 有什么区别?MySQL 整数类型详细解析
- 2024-11-15 SqlUtils 使用(sql函数的使用方法及实例大全)
- 2024-11-15 《优化接口设计的思路》系列:接口的权限控制
- 2024-11-15 java 培训 MySQL 一次性插入多行数据的操作
- 2024-11-15 详解 MySQL int 类型的长度值问题
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)