python动态性强类型用法实例


Posted in Python onMay 09, 2015

本文实例分析了python动态性强类型用法。分享给大家供大家参考。具体如下:

Python变量声明和定义

与C#不同,Python在使用变量之前无须定义它的类型,试着运行下面的例子:

i = 12 print i

从上边我们可以看到,变量 i 在使用前并不需要定义,但是必须声明以及初始化该变量。试着运行下面的例子:

i = 1
print i + j

上面的代码会产生一个异常:“NameError: name 'j' is not defined”,Python提示变量 j 没有定义。这点和BASIC等弱类型的语言不一样。在BASIC中,执行上述代码的时候不会产生异常,你可以在EXCEL的VBA开发环境里试一下,把 print改为MsgBox就可以,结果会输出 1 。这说明Python并不是一种类似BASIC的弱类型语言。

另一方面,Python与C#有一个很大的差异就是在程序运行过程中,同一变量名可以(在不同阶段)代表不同类型的数据,看看下边的例子:

i = 1
print i,type(i),id(i)
i = 10000000000
print i,type(i),id(i)
i = 1.1
print i,type(i),id(i)

变量 i 的类型在程序执行过程中分别经历了int、long和float的变化,这和静态类型语言(如C等)有很大不同。静态语言只要一个变量获得了一个数据类 型,它就会一直是这个类型,变量名代表的是用来存放数据的内存位置。而Python中使用的变量名只是各种数据及对象的引用,用id()获取的才是存放数 据的内存位置,我们输入的1、10000000000和1.1三个数据均会保存在id()所指示的这些内存位置中,直到垃圾回收车把它拉走(在系统确定你 不再使用它的时候)。这是动态语言的典型特征,它确定一个变量的类型是在给它赋值的时候。

另一方面,Python又是强类型的,试着运行下边的例子:

# -*- coding: utf-8 -*-
i = 10; j = 'ss'
print i+j
#正确的写法是print str(i)+j,输出10ss

会产生一个异常:“TypeError: unsupported operand type(s) for +: 'int' and 'str'”。在BASIC等弱类型的语言中,上边的例子会正常运行并返回(虽然有时候是不可预期的)结果。

所以,我们说Python既是一种动态类型语言,同时也是一种强类型的语言,这点是和C#不同的地方。对于Python的这种变量的声明、定义和使 用方式,C#程序员可能要花一段时间去适应,不过相信你会很快就喜欢上它,因为它让事情变得更加简单(而且不会不安全)。而且,C# 4.0 已经开始用类似的方式定义和使用变量(通过在变量名前加关键字dynamic),如果你先学了Python变量,将能够更快的适应C# 4.0的动态编程特征。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python正则表达式re模块详解
Jun 25 Python
Python内置函数OCT详解
Nov 09 Python
python getopt详解及简单实例
Dec 30 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
python实现三维拟合的方法
Dec 29 Python
Python 多维List创建的问题小结
Jan 18 Python
Python 函数list&read&seek详解
Aug 28 Python
Python time库基本使用方法分析
Dec 13 Python
Jupyter Notebook输出矢量图实例
Apr 14 Python
一些关于python 装饰器的个人理解
Aug 31 Python
Python functools模块学习总结
May 09 #Python
Python浅拷贝与深拷贝用法实例
May 09 #Python
九步学会Python装饰器
May 09 #Python
Python类属性与实例属性用法分析
May 09 #Python
python回调函数用法实例分析
May 09 #Python
python类和函数中使用静态变量的方法
May 09 #Python
Python实用日期时间处理方法汇总
May 09 #Python
You might like
PHP Global定义全局变量使用说明
2013/08/15 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
ASP SQL防注入的方法
2008/12/25 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
2016/01/26 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
python利用hook技术破解https的实例代码
2013/03/25 Python
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
MySQL面试题
2014/01/12 面试题
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
常见的软件开发流程有哪些
2015/11/14 面试题
酒吧副总经理岗位职责
2013/12/10 职场文书
财务部绩效考核方案
2014/05/04 职场文书
先进班集体事迹材料
2014/12/25 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
数据库连接池
2021/04/06 MySQL