首页 > 编程语言 >Python基础篇:简介

Python基础篇:简介

时间:2023-05-15 21:32:12浏览次数:51  
标签:__ name Python 简介 基础 foobar print 函数


一:简介

1.1 简介

Python是一种用C语言编写的、现代化弱类型(在声明变量时不需要显式指定数据类型) 、脚本语言解释执行:运行一句,解析一句,而不是编译执行,所以速度相对较慢)、动态语言(在程序运行时给对象绑定新的属性和方法),其特点是语法简洁、优雅、入门简单、应用场景广泛。

  • 语法简洁是指语法上能省则省
  • 省掉语句结束的分号;
  • 省掉代码块开始和结束的大括号{}
  • 省掉if语句的小括号()
  • 省掉元组中的小括号()
  • 省掉声明变量的关键字
  • 省掉变量的数据量类型
  • 省掉方法声明的参数的数据类型,省掉方法的返回值声明。
  • 省掉访问作用域(private、public)等。
  • 创建对象省略new关键字。
  • 抽象类不用abstract关键字修饰,抽象类就是接口。
  • Python中构造器方法__init__不支持方法重载,一个初始化方法列举出来所有属性,给每个属性赋一个默认值None,然后通过关键字参数代替任意的参数的组合。

1.2 Python设计哲学

  • 优美胜于丑陋。
  • 明了胜于晦涩。
  • 简洁胜于复杂,复杂胜于凌乱。
  • 扁平胜于嵌套。
  • 宽松胜于紧凑。
  • 可读性很重要。
  • 不要捕获所有错误,除非你确定需要这样做。
  • 如果存在多种可能,不要猜测,通常只有唯一一种最佳的解决方案。
  • 约定大于语法限制。如常量就是名字全部大写的变量,通过约定表示常量,而不是通过语法去强制表示。
  • 不占用常用的名字,如 init、file等,Python自己的内置都会在前后各使用两个下划线来做区别,如__init__、__file__等。
  • 使用魔法方法来代替接口,例如实现了魔法方法__iter__、__next__就相当于Java中实现了迭代器接口。

1.3 Python解释器的种类

  • CPython:使用C语言编写的,Python官方提供的,默认是这种。
  • PyPy:使用Python编写的,比CPython快,但是兼容性不如CPython。
  • Jython:基于Java编写的Python环境,可以将Python代码编译为Java字节码,在Java虚拟机下运行。
  • IronPython:基于.NET平台实现的Python的环境,可以兼容.NET Framework 链接库。

1.4 PyCharm编译环境

  • Virtualenv:虚拟编译环境,依赖库会保存到当前项目下面。
  • Pipenv: pipenv = pip + Virtualenv,是对Virtualenv的改进版本。
  • Conda:是一个开源的软件包管理系统和环境管理系统。需要单独安装Anaconda软件。用于进行大规模数据处理,预测分析和科学计算,致力于简化包的管理和部署。

1.5 Python官方文档

Python官方中文文档: https://docs.python.org/zh-cn/3/

二:应用场景

2.1 应用场景

  • 大数据:pyhive、pyflink、pyspark
  • 网路爬虫:Scrapy、BeautifulSoup
  • 人工智能:TransorFlow、PyTorch、Karas
  • 自动化测试:Selenium
  • 自动化运维:使用Python代替Shell脚本,在可读性、扩展性、重用性都要优于Shell脚本。
  • 科学计算:NumPy、SciPy、Matplotlib、pandas
  • Web应用开发:Django、Flask,豆瓣和知乎就是使用Python开发的。
  • GUI桌面应用开发:Tkinter、PyQT、PySide、wxPython、PyGTK 等。
  • 数据库可视化:Matplotlib
  • 机器学习
  • 游戏开发:Pygame、Pyglet、Cocos2d

2.2 受欢迎程度和运行效率

2.2.1 Python是最流行的

TIOBE开发语言流行排行榜 https://www.tiobe.com/tiobe-indexPython是最流行的,是第一名。

Python基础篇:简介_开发语言

2.2.2 Python是性能最差的

开发语言性能排行榜中Python是最后一名,是运行效率最差的。

Python基础篇:简介_Python_02

2.3 为什么Python的运行效率最差却是最受欢迎的???

  • Python的很多应用场景基本上都是单用户程序,如爬虫、大数据、自动化测试 Selenium、GUI桌面软件等等基本上都是单用户程序。Python不像Java语言一样通常作为服务器程序,同一时间内有多个用户同时访问。既然是单用户程序自然也用太关系运行效率,虽然Python运行效率在所有语言中最低的,但是相对于人来说那还是快的不在一个等级上,Python运行效率最差是相对于其它编程语言而不是相对于人,所以Python的速度是人类可以接受的,再说Python的应用场景通常都是单用户,综上Python的运行效率就变的没那么重要。
  • Python封装程度更高,也就是说实现相同的功能,Python可能只需要几行代码,而如果用C语言开发可能要几十行、几百行代码,代码少了,也就意味着开发出一个相同的功能所需要的时间更短,也就是Python的开发效率非常非常高(老板喜欢开发速度快的)。例如使用Python做爬虫、做自动化代码量非常少。
  • Python中有些应用场景是属于工具类的,也是一种单用户应用。
  • Python可以调用C、C++库。
  • Python库多,生态丰富
  • Python适用人群范围广,不止是职业程序员,Python被作为小学生课程。
  • 人生苦短,我用Python。

三:语法简洁

Python是一种现代化编程语言,既然是现代化,那就要有新的语法优化。

3.1 声明变量不需要关键字和数据类型

3.2 不需要在语句最后写;

// java
String name = "张三";

// javascript
var name = "张三"

# python
name = "张三"

3.3 方法的入参不需要写数据类型,不需要指定返回值类型, 也不需要使用{}来指定方法体

老语言都是使用一对 {}来表示方法体的开始和结束,而Python使用冒号:表示方法体的开始,使用缩进(一个Tab)表示方法体。

// java
public int add(int x, int y) {
    return x + y;
}

// python
def add(x, y):
	return x + y;

3.4 支持负索引、负步长

同样是获取最后一个元素,python由于支持负索引代码量就很少,看起来很简洁。

// java
List<String> names = Arrays.asList("a", "b", "c");
System.out.println(names.get(names.size() - 1));

# python
names = ['a', 'b', 'c']
print(names[-1])

# 字符串反转
foobar = 'foobar'
print(foobar[::-1])

3.5 判空

以下值做为bool值都视为False:

  • False
  • 字符串为空 “”
  • 元组为空 ()
  • 列表为空 []
  • Set集合为空 set()
  • 整型 0
  • 浮点型 0.0
  • 复数 0j
  • None

java还需要使用工具方法来判断值是否为空,而Python直接判断变量就行了。

String foobar = "foobar";
if (StringUtils.isNotBlank(foobar)) {
    int length = foobar.length();
}

// python
foobar = "foobar"
if foobar:
	length = len(foobar)

3.6 全局变量

python在if、try 等代码块中定义的变量竟是全局变量,这样try中定义的变量可以直接在finally中直接使用,而像其它java语言就必须把全局变量放在外边,这样一来代码就多了一行,这也是python精简的一个提现。

try:
    foobar = 'this is global variable'
except ValueError as e:
    print(foobar)

3.7 私有属性或方法用__表示

在其它语言中私有作用域一般是用关键字private来表示,而Python是在属性名或者方法名的前面使用两个下划线来__表示。这在代码上看起来更加精简,这也是Python代码简洁的一个提现。

class User:
    id = None
    name = None
    __password = None

    def __get_password(self):
        return self.__password


user = User()
# AttributeError: 'User' object has no attribute '__password'
# print(user.__password)

# AttributeError: 'User' object has no attribute '__get_password'
user.__get_password()

3.7 读取文件

TextIOWrapper 实现了迭代器可以直接使用for循环读取文件,像java语言要读取文件还需要将File包装成InputStream等,确实Python的写法更加的优雅简洁。

f = open('a.txt')
for line in f:
	print(line)
except Exceptlon as e:
	pass
try(
	InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("xxx.txt")));
	BufferedReader reader = new BufferedReader(isr)) {
	String line;
	while( (line= reader.readLine()) != null) {
		System.out.println(line);
	}
} catch (IOException e) {
	
}

3.8 创建对象不使用new关键字

// java创建对象使用new关键字
User user = new User();
# 很多编程语言创建对象都使用关键字new
user = User()

3.9 抽象类

Python中的抽象类不需要关键字修饰,只要方法中没有方法体,使用pass来占位,那么这个方法就是抽象类。Python中也没有接口,抽象类就是接口。这也是Python简化代码的一个重要提现。

# 抽象类或者接口
class Animal:
    def sound(self):
        pass


class Dog(Animal):
    def sound(self):
        print('旺旺')


class Cat(Animal):
    def sound(self):
        print('喵喵')


def say_hello(animal: Animal):
    animal.sound()


cat = Cat()
say_hello(cat)
dog = Dog()
say_hello(dog)

3.10 赋予了运算符更多的功能

在Python中可以使用比较运算符对两个对象比较大小,使用 + 号等运算符操作列表,这使得代码非常简洁。

user1 = User()
user2 = User()
print(user1 <= user2)

print([1, 2, 3] + [4, 5, 6])

3.11 缩写命名习惯

  • java推荐完整单词命名,即整个单词都完整拼写,如获取字符串长度,length()
  • ptyhon推荐缩写单词,即只写单词的一部分,如获取字符串长度 len()

3.12 嵌套函数(闭包)

java不支持嵌套函数,而Python支持嵌套函数(闭包),闭包:双层嵌套寒素,内层函数可以访问外层函数的变量,外层函数的返回值为内层函数名。内部函数如果想修改外部函数的变量可以通过关键字nonlocal来修饰。

demo.py

name = '狗哥'
def outer(msg):
    global name
    print(f'{name}:{msg}')

# 狗哥:我怕打死你
outer("我怕打死你")
# 狗哥:我先绑上一直胳膊
outer("我先绑上一直胳膊")
def outer(name):
    print(name)

    def inner(msg):
        print(f'{name}:{msg}')
    return inner


# 狗哥
foo = outer("狗哥")
# 狗哥:我怕打死你
foo("我怕打死你")
# 狗哥:我先绑上一直胳膊
foo("我先绑上一直胳膊")

两段程序功能是相同的,第一个片段更简洁,但是name是全局变量,全局变量也就意味着当前.py文件被别的文件导入时可以被访问,被访问意味着可能会被修改,被修改意味着很不安全。

import demo

demo.name = '虚竹'
# 虚竹:国师使用的不是拈花指
demo.outer('国师使用的不是拈花指')

而闭包就是为了解决全局变量引发的安全问题,通过闭包(函数嵌套函数)可以把全局变量的作用域限制到第一个函数的内部,这样其它python文件想再访问全局变量就访问不了了,因为全局变量已经变成函数内部的变量了。

闭包优缺点

优点

  • 无需定义全局变量即可实现通过函数,持续的访问。修改某个值。
  • 闭包使用的变量的所用于在函数内,难以被错误的调用修改。

缺点

  • 由于内部函数持续引用外部函数的值,所以会到这这一部分内存空间不被释放,一直占用内存。

3.12 其它

Python在老语言的基础上增加很多新的语法,对老的语法也进行简化,这使得在完成相同的功能上Python的代码量相对来说少了一些,看起来更加简洁、清爽。


标签:__,name,Python,简介,基础,foobar,print,函数
From: https://blog.51cto.com/u_16114318/6281006

相关文章

  • Python基础篇:日志logging
    一:日志级别CRITICAL=50FATAL=CRITICALERROR=40WARNING=30WARN=WARNINGINFO=20DEBUG=10NOTSET=0二:日志格式化https://docs.python.org/3/library/logging.html#logrecord-attributesAttributenameFormatDescriptionargsYoushouldn’tneedtoformatthis......
  • 深入理解 python 虚拟机:多继承与 mro
    深入理解python虚拟机:多继承与mro在本篇文章当中将主要给大家介绍python当中的多继承和mro,通过介绍在多继承当中存在的问题就能够理解在cpython当中引入c3算法的原因了,从而能够帮助大家更好的了理解mro。python继承的问题继承是一种面向对象编程的概念,它可以让一......
  • python 操作 PostgreSQL 数据库,线程并行修改 5w 条数据,性能优化
    python操作PostgreSQL数据库,线程并行修改5w条数据,性能优化110 娃哈哈店长的个人博客 /  433 /  0 / 创建于 3年前  获取新xls表中的所有数据并整理为列表形式返回其实修改的代码量不大,但是要考虑保留之前我们用的函数和方法还要继续能使用。excel2......
  • python openpyxl 操作excel
     openpyxl是从1开始计数,遍历操作时请用1为起始点,且总数加一,例:foriinrange(1,n+1) 单元格样式所需导入模块fromopenpyxl.stylesimportAlignment,Font,Border,Side,PatternFill样式#设置边框线align=Alignment(horizontal='center',vertical='c......
  • C基础笔记(指针)
    指针&变量   取地址的符号 *:地址得到地址里的东西指针变量通常情况下将指针指向地址赋为NULL被赋为NULL值的指针被称为空指针指针是一个用数值表示的地址,可以对指针进行四种算术运算:++、--、+、-指针可以用关系运算符进行比较,如==、<和>C......
  • SICP:元循环求值器(Python实现)
    求值器完整实现代码我已经上传到了GitHub仓库:TinySCM,感兴趣的童鞋可以前往查看。这里顺便强烈推荐UCBerkeley的同名课程CS61A。在这个层次结构的最底层是对象语言。对象语言只涉及特定的域,而不涉及对象语言本身(比如它们的文法规则,或其中的其体句子)。如要涉及它们,则要有一种元......
  • 以点类Point及平面图形类Plane为基础设计圆类Circle
    以点类Point及平面图形类Plane为基类公有派生圆类Circle,main(void)函数完成对其的测试。Point类结构说明: Point类的数据成员包括:①私有数据成员:X坐标x(double型),Y坐标y(double型)。Point类成员函数包括:①有参构造函数Point(double,double)和拷贝构造函数Point(constPoin......
  • 算法基础上机实验——2023.5.15
    1.#include<cmath>#include<cstdio>#include<iostream>#include<algorithm>usingnamespacestd;intmain(){inta[310],n,k=0;cin>>n;while(n!=-99999){a[k++]=n;cin>>......
  • Python基础语法入门
    Python基础语法入门1、Python的注释符号1、什么是注释?#学习任何一门代码,先学注释,注释是代码之母注释就是对一段代码的解释说明,它不会参与到代码的运行,只是起到提示作用2、如何注释?2.1、#单行注释#它可以使用快捷键帮助我们把代码写的更加规范快捷键:Ctrl+alt+1(格式......
  • 了解Python的基本数据类型
    引入 我们学习变量是为了让计算机能够记忆事物的某种状态,而变量的值就是用来存储事物状态的,很明显事物的状态是分成不同种类的(例如水的液态,气态和固态),所以变量值也应该有不同的类型 一、数字类型int(整型)float(浮点型)不可变数据类型int,整型,是没有小数点的数字......