介绍
Python已迅速成为就业市场上最需要的语言。 从Web开发到机器学习,Python的广泛应用是Python程序员需求旺盛的原因。 与其他机器学习语言的简单比较分析表明,它在Google趋势中越来越受欢迎。
Python在全球范围内的统治地位还可以通过在全球范围内搜索它的频率来显示。
Python的社区
Python增长的主要原因是由一个拥有30年历史的社区建立的开放源码开发。 StackOverflow.com给出的趋势就是一个证明。 了解Python如何留下三种主要的编程语言-Java,C,C ++。
甚至企业界也喜欢Python。 仅Google一家就创建了Tensorflow,Keras等广受欢迎的机器学习库,并免费分发了这些库。
从技术上讲
Python是
· 平台无关
· 可嵌入
· 动态类型
这意味着Python不同于C,C ++或Java,它们需要单独的编译和执行步骤,而直接解释为机器可理解的字节码。 正是由于这些特性,Python才能在从数字手表到火星漫游车的所有内容上运行。
在本备忘单中,我们将仅关注Python 3,因为2020年1月1日,社区决定不再支持Python 2。 该事件称为Sunsetting Python 2。
类形
Python中的构造块是一个对象,并且对象具有类型。 类型是描述存储在对象内部的数据的方式。 例如,要存储数字,我们有整数,浮点数和复数类型。 Python中类型的主要类别是布尔值,数字,序列,映射,类和异常。 我们将通过示例详细介绍所有这些类型,但让我们从最常用的基本类型开始。
基本类型
整数
a = 10 # Integer b = -9 # Integer can be negative c = 0b011 # Integer can be Binary d = 0o123 # Integer can be Octal e = 0x9AF # Integer can be Hexadecimalprint("Positive Integer = ",a, " | ", type(a)) print("Negative Integer = ",b, " | ", type(b)) print("Binary Integer = ",c, " | ", type(c)) print("Octal Integer = ",d, " | ", type(d)) print("Hexadecimal Integer = ",e, " | ", type(e))
在Python 3中,整数的长度仅受内存限制,而没有其他限制。 type()函数用于获取变量的类型。 让我们看看这段代码在终端上显示的内容。 打印功能在打印之前将二进制,八进制和十六进制形式转换为十进制。
复数,浮点数,布尔值,字符串和字节
其他基本类型如下所列
in1 = 1+2j # Complex Number fl1 = 0.78 # Float fl2 = 2.6e-2 # Float with scientific notation. e means 10^ fl3 = 1.8*10**308 +1 # One greater than the maximum float bl1 = True # Boolean True bl2 = False # Boolean False st1 = "Hello World!" # String bt1 = b"hola" # Byte
· Python中的float可以具有的最大值是1.8x10308。 任何更大的内容,Python都会将其标记为inf,即infinity
· 复数指定为 + j
· 字符串是字符序列。 字符串用一对单引号或双引号引起来。
让我们看看在终端上打印时它们如何显示。 另外,请注意相应的类(使用函数type()打印)。
字符串
string类型像海洋一样广阔。 一个人需要一个单独的部分,如果没有文章来描述它。
就像整数一样,字符串可以长到一个想要的长度。 要检查字符串有多长,我们可以使用len()函数。 稍后我们将介绍函数,但到目前为止,它仍然是执行单个任务的代码块。
str1 = "I am a string" str2 = 'I too am a string' str3 = "" str4 = str1 + ' ' + str2
· 我们也可以使用长度为0的字符串。 (str3)
· 引号称为定界符。
· 我们可以结合使用不同定界符的两个字符串。 (str4)
当您可能需要在字符串中加引号时,可能会出现这种情况。 为了在字符串中包含定界符,我们将字符串包含在另一种定界符中。
str5 = "Let's say we need a single quote i.e. -> ' " str6 = 'What if we "need" a double quote i.e. -> " '
如果我们需要在字符串中同时使用两种引号,则可以使用转义字符。 转义字符剥夺了字符的功能,并逐字呈现该字符。 在Python 3中,反斜杠" "是转义字符。
str7 = "Let's escape both single quote(') and double quote(")"
尝试打印上面没有转义符的字符串,您会发现它抛出错误。 另一种转义的方法是使用三重单引号(''')或三重双引号(""")来括起字符串。
str8 = '''Yet another way of escaping single (') and double (")''' str9 = """Yet another way of escaping single (') and double (")"""
这些转义字符保持隐藏状态。 他们就像披风。 但是,也可以通过在字符串前面加上R或r来揭示这些问题。 这样的带有显露转义字符的字符串称为原始字符串。
# Raw String str10 = R"Let's escape both single quote(') and double quote(")"
索引编制
如前所述,字符串是字符序列。 因此,我们实际上可以将它们视为数组,并且可以使用它们的位置访问各个子字符串。 任何非空字符串的第一个字符都从索引0开始。要访问字符串中位置L + 1的任何字符,我们通过写str [L]对其进行索引。
# Indexing String print("str7[0] = ", str7[0]) print("str7[1] = ", str7[1]) print("str7[0:10] = ", str7[0:10]) print("str7[10:5] = ", str7[10:5]) print("str7[10:25] = ", str7[10:25])
请注意,即使空格也算作字符串中的字符。
类型转换
类型可以相互转换。 互转换在Web开发等应用程序中很有用,您可能必须将服务器统计信息存储为字符串。 因此,您可能需要将整数和布尔值转换为字符串。
# Type Conversion (Initial Types Used)str1 = "15" in1 = 10 fl1 = 10.8
让我们尝试将每种类型转换为其他类型,然后打印结果。
· 将整数转换为浮点数时,会添加小数点
· 浮点数到整数转换也会舍入数字
· 也可以将数字的表示形式从十进制更改为二进制等。
· Bool()将任何非空字符串转换为True,将空字符串转换为false。
运算符
运算符是对一个或多个变量执行运算的符号。 例如,最常见的数字运算是两个或多个数字的加法运算。
数值运算
# Operators num1 = 10 num2 = 4 num3 = 5e2 num1 += 1 num1 *= 3 num1 /= 2
让我们看看一些操作的输出。
注意事项
· 注意编号3。 它以科学记数法书写,并以浮点数形式打印。
· 默认情况下,除法(也称为商)会导致浮点数。
· 底商取整除法结果。
· 有两种计算数字幂的方法。
· 另外,请注意底部的三个组合的赋值语句。 这些分别称为加法运算,乘法运算和除法运算符。
按位运算
按位运算仅对整数有意义。 必须特别注意| 和&运算符。 为了清楚地看到它们在工作,将整数打印为二进制数字很重要。
# Bitwise Operations num4 = 12 num5 = 9 bool1 = True bool2 = False
· 布尔变量或与|相同 和&与和相同
· 关于数字| 对数字的每一位进行运算
· 和<
数据结构
Python的某些内置类型也可以用作数据结构。 让我们先来看一下列表和元组,它们就像字符串和字节一样是序列类型,即它们按序列排列并且可以按该序列进行访问。
List
可以通过以下方式之一创建列表。
· 使用一对方括号表示空白列表:[]
· 使用方括号,用逗号分隔项目:[a],[a,b,c]
· 使用列表推导:[x for x in iterable]
· 使用类型构造函数:list()或list(iterable)
列表索引和切片
索引表示在索引/位置拾取特定元素。 切片意味着获取列表的子集。
# List Indexing l1 = [1,2,3,4,5,6,7,8,9,10]
请注意,为列表编制索引与为字符串编制索引有何相似之处。 这是因为在Python中这两个都是序列类型,并被视为有序数据结构。
List方法
#Lists l2 = [4,1,3,9,7] l3 = ['a','ab', 'abc','ab', 'ab'] #List Methodsl2.sort() # Sort l2.append(12) # Add an element at the end sum(l2) # Sum all the elements max(l2) # Find the maximum element min(l2) # Find the minimum element l2.extend(l3) # Add elements of another list to this list l2.insert(1,13) # Insert element at a specific index l2.remove('a') # Remove a specific element l2.count('ab') # Count occurrences of element l2.reverse() # Reverse List l2.pop(4) # Remove element from this position
元组
元组与列表非常相似。 如此之多,以至于有人有人称呼它为列表数据结构的表亲。 元组是不可变的,这意味着它的元素不能更改。
# Tuples tp1 = ("hello", ) # Single length tuple tp2 = (1,2,3,[5,6]) # Tuple containing mutable types
· 元组包含在圆形括号中
· 单个元素元组需要用逗号将其与常规字符串区分开
· 我们可以更改元组的元素(如果它是列表)(或其他任何可变类型)
# Immutability tp2[0] = 0
# Changing the mutable parts tp2[3][1] = 4
但是,如果不能更改,那么变量有什么用呢? 在跨越数十万行代码并由数百名程序员修改的大型项目中,有意义的是使一些数据对象保持不变,并且任何人都无法修改,例如 配置参数等
集合
集合是无序的。 这意味着它不会保留将元素添加到集合中的顺序。 这意味着它不同于诸如列表或字符串之类的序列类型。 因此,它不支持索引或切片之类的序列方法。 一组用于删除重复项,并计算数学运算,例如交集,并集和差。
# Sets set1 = {'a', 'b', 'c', 'a'} set2 = {'a', 'd', 'e', 'f'} set3 = {'a', 'd'}
· 每次打印时,一组元素的顺序都不同。
list1 = ['a','b', 'a', 'a'] set1 = set(list1) #How to convert list to a set
· 注意如何从列表创建集合。
· 同样,这也可以用来找出列表中的唯一元素
字典
在其他语言中,哈希称为Python中的字典。 字典是一种映射类型。 它也是无序的,但是是可变的。 字典由key:value对组成。 密钥应该是可哈希的并且都是唯一的。
如果对象的哈希值在其生命周期内从未发生变化,并且可以与其他对象进行比较,则该对象是可哈希的。 比较相等的可哈希对象必须具有相同的哈希值。
# Dictionary dict1 = {'a': 12, 'b': 13, 'c':14, 'd':15} dict2 = {'d' : 16, 'e': 17} # Update old key and add new key dict1.update(dict2)
词典非常有用,因为它们允许快速搜索。 其次,如今大多数Web开发框架都使用API,并且API中的基本数据结构是JSON,而JSON实际上是字典。
控制流
在Python中,程序的流程可以由各种语句控制。 这些语句根据某些布尔条件改变流程。
if / else
if / else是最常见的控制流语句。 Elif是" else if"的缩写。
#Conditionals - If/Else count = 26 if(count < 10): print("Too Less") elif(count >= 10 and count < 30 ):print("Just right") else: print("Too much")
for循环
For循环用于将特定代码块重复预定次数。 与C或Java不同,Python中的for循环遍历列表,字符串甚至字典之类的序列。 让我们看一些例子
#For Loop list1 = [1,2,3,4,5,6,7,8,9,10] count = 0 print("list1 = ", list1) for list_item in list1:print("list1[",count,"] = ", list_item) count +=1
str1 = "Hello World!" print(str1) for c in str1: print(c)
break,continue语句
如果我们想在某些特殊条件下中断循环,可以使用break语句。 在下面的代码块中,我们将遍历一系列水果。 我们知道一头大象已经潜入我们的水果篮,我们希望将其删除。 因此,一旦找到大象,我们就停止循环并停止打印更多水果。
fruits = ["apple", "banana", "cherry", "dragonfruit", "elephant", "fig"] print("Available Fruits = ", fruits) for fruit in fruits: if(fruit == "elephant"): print("I cannot eat", fruit) break else: print("I can eat", fruit)
Continue语句用于跳过其后的所有内容,并继续执行循环的下一个迭代,而Pass只是填充语句。
继续特定于循环
# Pass Demofor letter in 'Birthday': if letter == 'h': pass print('This is pass block') print('Current Letter :', letter) # Continue Demo for letter in 'Birthday': if letter == 'h': continue print('This is continue block') print('Current Letter :', letter)
While循环
for和while之间的区别在于,while继续进行直到其条件变为假。
# While Loop count = 0 while count < 5: print(count) count += 1
函数
当需要一次又一次地执行特定任务时,它将包装在函数中。 附加到类对象上的函数称为实例方法。 其他类型的方法是内置方法。 这些是附加到特定类型(例如 len()附加到列表,字典和集合。
· 他们可以接受输入(称为参数)
· 他们可能会返回内部产生的信息
假设我们要使用while循环生成数字列表。 该列表从数字0开始,一直持续到数字upper_limit。 无需每次更改upper_limit时都编写while循环,而是可以编写一个函数。
#Functions def generate_number_list(upper_limit): index = 0 output_list = [] #Empty List while(index < upper_limit): output_list.append(index) index+=1 return output_list print(generate_number_list(5)) print(generate_number_list(10))
· Upper_limit是函数的参数
· 要输出生成的列表,我们使用关键字return
· 使用具有不同参数(参数)的相同函数,我们可以生成两个不同的列表
命名参数与位置参数
如果我们有多个参数,则需要一种方法来知道将哪个参数放在括号中的哪个位置。 为此,我们可以使用位置参数或命名参数。
· 位置参数按照在函数中定义的顺序提及
· 命名顺序的定义类似于此arguments_name =参数值,它们可以遵循任何顺序。
#Named Argument vs Positional Argument def generate_number_list(start_index, upper_limit): index = start_index output_list = [] #Empty List while(index < upper_limit): output_list.append(index) index+=1 return output_list print("Positional Arguments = ",generate_number_list(1,11)) print("Named Arguments = ",generate_number_list(upper_limit = 10, start_index = 2))
· 请注意,在命名实参声明中,我们如何以任何顺序提及实参。
默认参数
有时我们可能会有一些仅偶尔出现的参数。 因此,我们在函数定义中为它们提供了默认值,以防它们不出现。
#Default Arguments def generate_number_list(start_index, upper_limit, increment=1): index = start_index output_list = [] #Empty List while(index < upper_limit): output_list.append(index) index = index + increment return output_list print("Default Value for Increment = ",generate_number_list(0,11)) print("Non-Default Value for Increment = ",generate_number_list(0,11,2))
Lambda函数
Python允许我们创建不带名称的函数。 这些函数不包含我们在上面看到的def关键字。 但是,它们包含关键字lambda,因此它们被称为lambda函数。 它们具有以下结构lambda参数:表达式
# Lambda Function x = lambda a : a/2
范围
范围实际上不是一个函数,而是像元组那样的不可变序列类型。 它生成一系列数字。
#Range Function (Range from 0 to N)list1 = [] for x in range(5): list1.append(x) print("list1 = ", list1) # Range from a to blist2 = [] for x in range(2,5): list2.append(x) print("list2 = ", list2) # Range from a to b with a step of clist3 = [] for x in range(2,10,3): list3.append(x) print("list3 = ", list3) #Directly creating list from range print("list(range(10)) = ", list(range(10)))
Python包含大量其他内置方法。 在这里查看并尝试其中的一些。
该备忘单的其他版本也出现在Saturn Cloud的博客中。 请检查它们以获取其他信息内容。
类Class
Python是一种面向对象的编程语言,而类是面向对象设计的基础。 对象是类的实例。 对这些对象执行的任何操作都是通过类方法完成的。 让我们看一下如何创建和使用类。
创建类和方法
#Import Random Library import random #Class Definition class Ball: ''' A simple ball class to demonstrate OOP''' #Constructor Function def __init__(self, brand, age, color): self.brand = brand self.age = age self.color = color #Game for which ball is required and its speed in miles/hour self.game = "Football" self.speed = 0 #Method to kick the ball def kick(self): self.speed = random.randint(5,50) print("Ball ",self.brand," has been kicked. Its new speed is ", self.speed, " miles/hour") def stop(self): if(self.speed == 0): print("The ",self.brand," ball is already stopped") else: self.speed = 0 print(self.brand," Ball successfully stopped")
注意事项
· 关键字类创建类。 请注意,约定规定类名应以大写字母开头
· __init__是一个构造函数,当我们调用Ball()函数时,该函数将创建对象
· 此类具有五个属性或字段或属性,分别称为品牌,年龄,颜色,游戏和速度。
· 此类有2个实例方法,称为kick和stop。
踢法踢球并赋予其随机速度
Stop方法使速度为0或如果球尚未移动则发出警告。
创建对象
#Creating Objects from Ball Class ball1 = Ball("Lego", 10, "Black") ball2 = Ball("Nike", 1, "Yellow") print("Ball1 brand | age |color = (", ball1.brand, " | ", ball1.age, " | ", ball1.color, ")") print("Ball2 brand | age |color = (",ball2.brand, " | ", ball2.age, " | ", ball2.color,")") print("Ball1 speed = ", ball1.speed) ball1.stop() print("Ball2 speed = ", ball2.speed) ball2.kick() print("Ball2 speed = ", ball2.speed) ball2.stop() print("Ball2 speed = ", ball2.speed)
请注意,使用相同的方法来创建两个球。 只是论点不同。 我们可以通过编写object.attribute例如来访问对象的属性 Ball2.color给我们它的颜色。 我们可以通过编写object.method()来调用方法。 Ball2.kick()。kick方法修改球的速度属性。 我们在踢Ball2之后通过分别打印速度检查了这一点。
文件处理
Python提供了内置方法来读取和写入文件。 要创建和写入文本文件,我们将Python的内置函数称为open。 我们将文件名作为参数传递。 另一个参数指示打开文件的方式。
" a" =追加-追加到文件末尾
" w" =写入-覆盖任何现有内容
" r" =读取-读取内容
# File Writingfilename = “test.txt” file_handle = open(filename, “w”) file_handle.write(“Yay!! File Created”) # File Openingfile_handle = open(filename, “r”) print(file_handle.read())
库/模块
Python是一种社区驱动的语言。 图书馆为世界上每一个可能的问题而存在。 要在程序中使用任何外部库,必须将其导入。 但是,在导入库之前,需要使用Pip安装它。 Pip是Python随附的软件包安装程序。
PIP
要安装任何软件包,我们只需输入pip install package_name
因此,假设我们要安装一个名为PyGame的软件包。 它是使用Python制作游戏的库。 一旦我们对该程序包运行pip,将发生以下情况。
Matplotlib
Matplotlib是用于创建数据可视化的软件包。
#matplotlib (Plotting a sine wave) import matplotlib import matplotlib.pyplot as plt import math # Data for plotting x_axis = range(0,2000) x_axis = [x/100 for x in x_axis] y_axis= [math.sin(x) for x in x_axis] fig, ax = plt.subplots() ax.plot(x_axis, y_axis) ax.set(xlabel='x (radians)', ylabel='sin(x)', ) ax.grid() fig.savefig("test.png") plt.show()
看一下导入模块并开始使用其方法有多简单。 例如,要计算正弦值,我们导入了Math模块并仅使用math.sin()。 输出图如下。
Pandas
Pandas是面向数据科学家的重要Python库。 它具有一个称为DataFrame的数据结构,就像一个数据表。 使用Pandas,我们可以读取csv / xls文件并将数据存储在DataFrames中。 在下面的示例中,我们将从csv文件导入房屋数据,将其存储在数据框中并分析该数据。
Head()函数向您显示数据的前5行。 每行是加利福尼亚特定家庭的数据。
import numpy as np import pandas as pd house_data = pd.read_csv(“https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv", sep=”,”) print(house_data.head())
上方数据框右栏中的第二个指向给定家庭的中等收入值。 看看收入如何分配到所有家庭是有意义的。 因此,我们将尝试使用数据框的hist()方法绘制收入的直方图。
import matplotlib.pyplot as plt house_data["median_income"].hist() plt.show()
请注意,收入是如何几乎以高斯形式分配的,少数人的收入在80K以上和20000以下,而大多数人处于中等水平。
Beautiful Soup—爬网的包
漂亮的汤包可帮助您从任何网页上抓取html并将其分解成各个组成部分。 例如,假设我们要获取剑桥大学英语系所有教师的姓名。 我们可以编写下面的代码。
#Beautiful Soup import requests from bs4 import BeautifulSoup import re URL = "https://www.english.cam.ac.uk/people/" r = requests.get(URL) soup = BeautifulSoup(r.content) for link in soup.findAll('a', attrs = {'href': re.compile("^/people/")}): print(link.string)
在这段代码中,我们解析页面,从html获取所有超链接,从这些链接获取文本。
Python的软件包数据库非常丰富,使其成为一种非常强大的语言。 我鼓励您也探索其他软件包。
Jupyter Notebooks
最后,在人工智能和数据科学领域,Jupyter越来越成为在会议上展示您的工作的首选工具。 您可以通过Jupyter Notebooks逐步介绍Python代码。 它们还可以用于通过实时代码,方程式和可视化文件创建和共享文档。
结论
Python语言是Thor在当今世界中的重锤。 它易于学习,快速掌握并且令人惊叹。 熟练掌握Python是必须具备的技能。 只需达成任何目标,然后开始将咖啡转换为代码即可。
(本文翻译自Rishi Sidhu的文章《Comprehensive Python Cheat Sheet for Beginners》,参考:https://medium.com/the-codehub/comprehensive-python-cheat-sheet-for-beginners-5d76bb038fa2)