在正式学习Python语言之前,我们先来了解一下Python有哪些特性,以及Python的基本语法结构是怎样的。

有很多同学问,Python语言到底能做什么呢?我的回答是:Python几乎什么都能做,包括移动、GUI、Web、数据分析,更是数据挖掘、机器学习、深度学习等技术的首选语言。

基于 Python 的包更是不胜枚举,“Tiobe 编程语言排行榜”最新统计显示 Python 是增长最快的语言。

这得益于 Python 语言语法简单、开发效率高,集成系统非常方便。Python 相关的就业机会也是非常多,待遇也很优厚。因此,不管从易用性,还是工作机会和待遇来说,Python 都是 IT 从业者需要掌握的语言。

现在先让我来问大家一个问题,Python到底是怎样一种编程语言呢?

要回答这个问题,首先需要介绍一下Python的量大特性:动态语言和弱类型。

那么什么是动态语言呢?

要了解什么是动态语言,要首先了解“类型检查”。类型检查是验证类型约束的过程,编译器或解释器通常在编译阶段或运行阶段做类型检查。

类型检查就是查看“变量”和它们的”类型”,然后判断表达式是否合理。例如,不能拿一个 string 类型变量除以浮点数变量。

如果类型检查发生在程序运行阶段,那么它便是“动态类型语言”。常见的动态语言包括:

Python

JavaScrpit

PHP

类型检查发生在“编译阶段”的是“静态类型语言”。常见的静态类型语言包括:

C

C++

Java

Swift

Kotlin

C#

Scala

现在明白了吧,Python属于动态类型语言,也就是说,Python中的数据类型在编译时是不检查的,只有在运行时才会检查。这么做的好处是在定义变量时可以不事先指定数据类型,或者随便喂变量指定一个值,反正后期还可以变。但坏处也显而易见,尽管动态类型带来了遍历,但同时也带来了麻烦。由于变量的数据类型是不确定的,所以就会导致在任何时候,变量可能是任何的数据类型。这样就会造成一个问题。我们就无法准确的得到变量内部的成员。例如。变量的初始类型是一个类。如果编程语言是静态类型的,那么就意味着这个变量的类型永远不可能变,所以我们可以准确地得知这个变量所对应的这个类里面的成员,比如说这个类中有什么方法,有什么属性。但是如果这种语言是动态类型的。那么就意味着这个变量有可能会变成其他的数据类型,比如说,变量可能会变成int类型。如果是这样的话,我们就没有办法准确地得知这个变量所对应的类型中的成员。这也是为什么现在几乎所有的支持动态语言的IDE的用户体验都不如支持静态语言IDE的原因。

那么什么是弱类型语言和强类型语言呢?

如果用一句话定义,这句话就是:变量的数据类型一旦被指定,就永远不会变化,这种语言就称为强类型语言。反之。如果变量的数据类型被指定,后期还可以改变这个变量的数据类型,那么这种语言就称为弱类型语言。

根据这个定义。Python很明显是一种弱类型语言,因为在任何时候都可以为Python变量赋任何类型的值。例如,

x = 20 #整数类型

x = 'hello' #字符串类型

x = 20.12 #浮点类型

x = True #布尔类型

在上面的4行代码中,变量x改变了4次数据类型,首先为x赋值为20,在定义x变量的同时,将x变量的数据类型设置为整数类型,然后分别将x的数据类型设为字符串、浮点和布尔类型。任何可以实现这种效果的编程语言都是弱类型语言。

这里可能会有如下两个误解:

1. 有很多编程语言,如Java、Swift、Dart等,都至少有一种数据类型,是所有数据类型的根,如Java中的Object、Swift中的Any、Dart中的dynamic,如果变量声明为这些数据类型,同样可以设置任何,从表面上看,与动态类型语言的效果类似,不过这些语言仍然是强类型语言,因为变量的类型并没有改变,只是变量的类型允许设置任何类型的值,因为这些数据类型是一切类型的根类型。

2. 有很多资料和书将Python说成是强类型语言,理由是不能与其他数据类型在计算表达式中混合使用。例如,在Python语言中有两个变量x和y,x是字符串类型,y是整数类型。x和y不能直接相加,而需要将x转换为整数类型,或者将y转换为字符串类型。其实这么理解是完全错误的,因为这是一个语义的规则。

我们不妨做个假设,假设一种编程语言如果是弱类型或强类型,那将永远是弱类型和强类型语言。如果这个假设成立,那么未来的Python版本有可能可以让x和y相加,只要规定数据类型的优先级即可,也就是说,如果两个完全不同的数据类型的值相加,以谁为主,这里姑且规定,String类型在所有内建数据(int、float、bool等)类型中的优先级最高,那么x + y,其实会自动将y转换为字符串,然后再和x连接。这种语言的改进完全有可能。

那可能有的同学会问,这么改进,不会让大量已经存在的Python程序出问题吗?如果只是这种改进,当然不会有任何问题。因为x + y只有如下3种可能:

1. 直接写成x + y,这种可能会导致程序出错,所以程序员会避免这种写法

2. 将y转换为字符串类型,这总情况与支持不同类型相加的Python版本的功能吻合,所以不会出现问题

3. 将x转换为整数,再与y相加,其实这就成了两个整数相加了,也不会有问题;

所以不管是哪种可能,都不会对原来的程序产生任何影响。如果Python的未来版本做了这种改变,那么就意味着Python就变成了一种弱类型变成。这与前面的假设相悖。

那么可能有的同学会问,难道Python的未来版本就不能对变量数据类型变化规则作出改变吗?也就是说,一旦变量的数据类型确定以后,就不能再改变。这么做,从技术上当然是没有问题。但这是一个编程语言的变化禁区。因为一旦这么变化,那么现存的Python程序真的会出问题。还是用上面的代码,这么变化的后果就意味着后3行代码将全部出错。所以对于编程语言的改进,并不是随意的,否则会造成很大的麻烦。因此,定义什么是弱类型或强类型语言,一定要在编程语言几乎不可能改变的特性上,如果变量数据类型的变化规则,这样才会符合前面的假设。当然,你可以假设编程语言的这个特性是随时可以变化的,例如,2012年的时候,是弱类型,在2016年,由于语言升级,所以变成了强类型语言。

现在可以总结一下:

常用的强类型编程语言如下:

C

C++

Java

C#

Swift

Kotlin

Dart

常用的弱类型编程语言如下:

Python

JavaScript

PHP

下面看一下Python不同于其他大多数编程语言的规则。

1. 命名规则

首先说明一点,命名规则并不是强制的,这只是约定,你可以不遵守,也可以指定团队自己使用的命名规则,但最好团队所有的成员使用同一的规则。下面列出的只是一种普通采用的规则,也是大多数Python程序库采用的规则。

标识符允许使用英文、数组和下划线,但不能以数字开头,这一点和其他编程语言相同;

Python是大小写敏感的编程语言,所以test和Test表示不同的含义;

变量名用小写形式,如value、test、hello等。如果变量名包含多个单词,那么中间用下划线分隔,如my_value、product_name等;

方法名与变量名的命名规则相同,如get_value(),set_my_value(...);

常量中所有的英文字母要大写,如果包含多个单词,中间用下划线分隔,如PI、PRODUCT_PRICE等;PS:在Python中并没有常量,但可以将变量当做常量使用;

类名采用大驼峰命名法,也就是每一个单词的首字母都要大写,如MyClass、Product、NewForum等;

如果类中的变量以单下划线(_)开头,如_value,是受保护变量,相当于Java中的protected,按官方描述是只能由本身或子类访问,但经过测试,外部也可以访问被声明为protected的变量,可能是Python解析器并没有做这样的限制;

如果类中的变量以双下划线(__)开头,如__value,是private类型的变量,只允许自身访问;

2. 缩进原则

这是Python与任何其他编程语言都不同的地方。其他的编程语言都是通过大括号来指定代码块的,而Python是通过缩进来指定代码块的。代码块的缩进可以任意,但同一个代码块中的每一行代码的缩进必须一致。

下面的代码定义了一个类Product,该类包括一个构造方法和一个普通方法,以及一个普通的类变量。后面的代码创建了Product对象,并调用了get_name方法。该例包含了类作用域和方法作用域,作用域以冒号(:)开头,后面作用域中的代码的缩进要一致,否则程序会报错。关于类的详细解释,会在后面的文章中详细讲解。

classProduct:

name= "iPhone"

def __init__(self, name):

self.name=namedefget_name(self):returnself.name

product= Product("特斯拉")print(product.get_name())

其实我一开始学Python时,就感觉这个用缩进确定代码块的方式很别扭,因为一旦代码的缩进弄乱了,就很难调整回来,这不像用一对花括号,只要在花括号之间的肯定属于同一个作用域。如果既然Python这么用了,就只能接受了。据我所知,数百种编程语言,好像只有Python是这么做的。不过由于Python的其他特性非常吸引人,所以这点小瑕疵并不影响Python的流行。

python缩进的描述_Python编程思想(2):Python主要特性、命名规则与代码缩进相关推荐

  1. python 清空所有对象_Python编程思想(7):列表的增删改操作

    李宁老师已经在「极客起源」 微信公众号推出<Python编程思想>电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法.读者可以在「极客起源」 公众号中输入 160 ...

  2. python的缩进规则是什么意思_Python编程思想(2):Python主要特性、命名规则与代码缩进...

    目录 那么什么是动态语言呢? 那么什么是弱类型语言和强类型语言呢? Python命名规则 缩进原则 李宁老师的<Python编程思想>上线了,囊括了Python的核心技术,以及Python ...

  3. python tkinter计算器实例_Python编程使用tkinter模块实现计算器软件完整代码示例

    Python 提供了多个图形开发界面的库.Tkinter就是其中之一. Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数 ...

  4. python创建列表副本_Python编程15:Python列表的排序和列表的副本

    #少儿编程# Python列表是一种有顺序(ordered)的集合,每个元素都有一个位置,这个位置就是索引.列表中的元素位置是固定的,也就是说你每次访问这个列表,它的元素位置都不会变,除非用inser ...

  5. python完全支持面向对象编程思想_面向对象的编程思想和Python的继承和多态,特殊方法,引用计数...

    面向对象的编程思想和Python的类,访问和属性,继承 在上一文中我们了解到了,私有的属性的访问方式:实例名._类名__私有属性名. 一.私有的属性如何对外提供公有的取值和赋值方法呢?提供公有的方法作 ...

  6. python完全支持面向对象编程思想_面向对象的编程思想和Python的类,访问和属性,继承...

    本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和Python类的继承. 复制代码 一.访问权限: Python中在类的内部定义属性和方法,在类的外部是可以直接调用或进行访问 ...

  7. python 类和对象_面向对象的编程思想和Python的类,访问和属性,继承

    面向对象的编程思想和Python的类,类的方法和属性,实例方法这一文从面向对象的角度,介绍类的定义,类的属性和自定义方法. 本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和 ...

  8. python 去掉双引号_python知识学习,python标识符和关键字

    python标识符和关键字 标识符和关键字都是之中具有某种意义的标记和称谓,就像人的外号一样.所谓的标识符就是代码的分号.单引号.双引号等等就是标识符,而代码中的if.for等等就是关键字. pyth ...

  9. python命名规则,代码规范

    python命名规则,代码规范 1.模块命名 2. 类命名 3.函数命名 4.变量命名 5.空行 1.模块命名 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况) ...

  10. python 静态方法_Python编程思想(25):方法深度解析

    -----------支持作者请转发本文-----------李宁老师已经在「极客起源」 微信公众号推出<Python编程思想>电子书,囊括了Python的核心技术,以及Python的主要 ...

最新文章

  1. 大话中文文本分类之TextRNN_ATT
  2. 初识linux之文件管理
  3. html5获取当前坐标,HTML5教程 如何获取当前位置的经纬度
  4. 阿里GTS解密--GTS的原理、架构与特点
  5. nginx 及 php 配置
  6. c++随机数函数rand()
  7. 小白学开发(iOS)OC_ SEL数据类型(2015-08-10)
  8. DEPHI XE5 XE6 ANDROID IOS开发的几点体会
  9. 怎么使用水经注万能地图下载器制作百度行政区划个性化地图
  10. logo字体在线设计工具
  11. 中国公用计算机互联网网络简称为什么,中国公用计算机互联网国际联网管理办法...
  12. 超全回顾 | 5位抖音工程师揭秘抖音iOS基础技术(附PPT和回放视频)
  13. 2019 秋季最新最全面 JAVA 面试题 附答案
  14. Android RadarScanView雷达扫描控件
  15. markdown渲染器--ACwing网站yxc老师题解
  16. 拼多多卖家打单发货技巧,这里告诉你~
  17. 014基于深度学习的脑电癫痫自动检测系统-2018(300引用)
  18. 【数字化】分享整理-数据中台=大数据平台+数据资产管理平台+数据服务平台
  19. P8775 [蓝桥杯 2022 省 A] 青蛙过河
  20. CSP考试须知与各种小技巧

热门文章

  1. c#:无限极树形结构
  2. 对课程第二次作业的补充与反馈
  3. 每日英语:How Many People Really Use Sina Weibo
  4. VBA实战技巧精粹013:宏代码保存工作簿的3种方法
  5. PTA是什么?BT-WIFI共存 转帖
  6. SetMutableGraph
  7. matlab钢材切割,一种基于MATLAB的钢材裂纹扩展速率试验数据处理方法
  8. java实现秒杀系统_Java秒杀系统--4.实现秒杀接口
  9. 十五、K8s helm包管理与应用
  10. IS-IS快速收敛调优(二)——链路故障检测、LSP智能定时器和SPF智能定时器