Python笔记--动/静态语言部分区别

在学python之前一直把动态语言和静态语言的区别理解为要写int char这样的预定义类型的就是静态语言,而可以不用事先声明数据类型的则是动态语言,直到看到了这个:



python是动态语言,实例创建出来之后仍然可以被绑定其他属性,即使类中没有规定。Java/C#是静态语言,实例创建出来后属性就固定了,有什么属性是类规定好了的,不允许改变。

当一个Student类创建之后,它的内部的字段属性只有name和score,如果在java(静态语言)中,是无法使用bart.age这样的方式给student这个类动态的添加一个字段的(可以使用继承的方式扩展一个新的含有age属性的student2类,java可以在运行时修改类中属性的值,但是无法在运行时修改student这个类中的属性的,也就是不能给它新增字段或者删掉字段):可以看到age属性为红色,代表异常,


所以个人认为动态语言和静态语言本质上的区别在于,能否在运行时“绑定”新的属性,而提前声明数据类型个人觉得属于强类型和弱类型的差别,即隐式转化。


同时动态语言还存在一种“鸭子类型”,即动态语言对继承体系要求不严格:一个对象只要“看起来像鸭子,走起路来像鸭子”那么它就可以被看作是鸭子

python:(python中的继承是直接将父类当作参数传给子类)

class Student():
    def grade(self):
        print('哇要考试啦!')


class goodStudent(Student):
    def grade(self):
        print('哇满分!')


class badStudent(Student):
    def grade(self):
        print('哇零分')


class Pig():
    def grade(self):
        print('精品猪肉!')


def kind(student):
    student.grade()


student = Student()
good = goodStudent()
bad = badStudent()
pig = Pig()
kind(student)
kind(good)
kind(bad)
kind(pig)

Java:



可以看到,静态语言(java)是没有python那样的鸭子类型的特性的 


以上观点部分为个人观点以及部分引自廖雪峰python教程及知乎相关话题,python代码则引自python教程,java代码为自己手打,如有错漏之处,希望大家能够指出,互相探讨,共同进步。                  ----2018.2.24


经过几天的思考,发现,其实把动静态语言归纳为需要提前声明类型也是有道理的,因为它们的外在表现确实是这样,这里要明确一个概念就是当我们定义一个class的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和python自带的数据类型,比如str,list,dict没什么两样:

a = list() # a是list类型
b = Animal() # b是Animal类型
c = Dog() # c是Dog类型

所以python可以直接把pig传入kind方法(即便kind方法已经声明了参数类型为student),但是因为是动态语言,所以在编译时不会报错,并且在运行时,发现pig也有grade这个方法("鸭子类型"),所以能够正常运行,如果pig没有grade这个方法则在运行的时候会报错                                       更新时间--2018.2.26



报错pig中没有grade这个属性(方法)                          


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(完整版)Python基础学习笔记 (完整版)Python基础学习笔记全文共69页,当前为第1页。(完整版)Python基础学习笔记全文共69页,当前为第1页。Python 基础学习笔记 (完整版)Python基础学习笔记全文共69页,当前为第1页。 (完整版)Python基础学习笔记全文共69页,当前为第1页。 基于《Python语言程序设计基础(第2版)》 第一部分 初识Python语言 第1章 程序设计基本方法 1.1 计算机的概念 计算机是根据指令操作数据的设备,具备功能性和可编程性两个基本特性。 计算机技术发展阶段: 第一阶段:1946-1981年,"计算机系统结构阶段"。 第二阶段:1982-2007年,"计算机网络和视窗阶段"。 第三阶段:2008年至今,"复杂信息系统阶段"。 第四阶段:月20年后某个时期开始,"人工智能阶段"。 1.2程序设计语言 1.2.1程序设计语言概述 机器语言:直接使用二进制代码表达指令,可被计算机硬件直接识别和执行。不同计算机结构的机器指令不同。 汇编语言:使用助记符对应机器语言中的指令,可直接操作计算机硬件。不同计算机结构的汇编指令不同。 机器语言和汇编语言都直接操作计算机硬件并基于此设计,统称"低级语言"。 (完整版)Python基础学习笔记全文共69页,当前为第2页。(完整版)Python基础学习笔记全文共69页,当前为第2页。高级语言:用更接近自然语言的方式描述计算问题。代码只与编程语言有关,与计算机结构无关。 (完整版)Python基础学习笔记全文共69页,当前为第2页。 (完整版)Python基础学习笔记全文共69页,当前为第2页。 1.2.2编译和解释 高级语言按执行方式可分为采用编译执行的静态语言和采用解释执行的脚本语言。 编译是将源代码转换成目标代码的过程。 解释是将源代码逐条转换成目标代码同时逐条运行目标代码的过程。 1.2.3计算机编程 我学习Python的原因: 通过编程实现自化,提高效率。 通过编程了解一个新的广阔世界。 学习一门编程语言(重点在于练习) 掌握该语言法 结合问题设计程序结构 掌握解决问题的能力 1.3Python语言概述 1.3.1 Python语言的发展 Python语言是一个法简洁、跨平台、可扩展的开源通用脚本语言Python语言诞生于1990年,创世人为Guido。 2000年10月,Python 2.0正式发布,2010年,Python 2.x系列发布最后一版(2.7)。 (完整版)Python基础学习笔记全文共69页,当前为第3页。(完整版)Python基础学习笔记全文共69页,当前为第3页。2008年12月,Python 3.0正式发布,解释器内部采用完全面向对象的方式实现,代价是3.x系列版本无法向下兼容2.x系列的既有法。 (完整版)Python基础学习笔记全文共69页,当前为第3页。 (完整版)Python基础学习笔记全文共69页,当前为第3页。 Python 2.x已经是遗产,Python 3.x是这个语言的现在和未来。 1.3.2编写Hello程序 print("Hello World") 1.3.3 Python语言的特点 法简洁 可跨平台 应用广泛 支持中文 强制可读:通过强制缩进体现句间的逻辑关系提高了程序的可读性 模式多样:法层面同时支持面向过程和面向对象两种编程方式 粘性扩展:通过接口和函数集成其他语言编写的代码 开源理念 库类丰富 1.4 Python语言开发环境配置 Python解释器 IDLE开发环境 交互式启 文件式启 Python语言集成开发环境——PyCharm 1.5 程序的基本编写方法 1.5.1 IPO程序编写方法 (完整版)Python基础学习笔记全文共69页,当前为第4页。(完整版)Python基础学习笔记全文共69页,当前为第4页。每个程序都有统一的运算模式:输入数据、处理数据和输出数据。这种朴素的运算模式形成了基本的程序编写方法:IPO(Input,Process,Output)方法。 (完整版)Python基础学习笔记全文共69页,当前为第4页。 (完整版)Python基础学习笔记全文共69页,当前为第4页。 IPO不仅是程序设计的基本方法,也是描述计算问题的方式。 1.5.2理解问题的计算部分 使用计算机解决问题的6个步骤: 分析问题 划分边界 设计算法 编写程序 调试测试 升级维护 第2章 Python程序解析 2.1 Python程序法元素分析 Python程序包括格式框架、注释、变量、表达式、分支句、循环句、函数等法元素。 程序的格式框架 Python语言采用严格的"缩进"来表明程序的格式框架,缩进表达了所属关系 在代码编写中缩进可通过Tab

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值