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常用列表数据结构小结
Aug 06 Python
Python httplib模块使用实例
Apr 11 Python
Python通过poll实现异步IO的方法
Jun 04 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 Python
python自动化测试通过日志3分钟定位bug
Nov 20 Python
Python 图片添加美颜效果
Apr 28 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
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
Oracle Faq(Oracle的版本)
2006/10/09 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
JS hashMap实例详解
2016/05/26 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
js代码实现轮播图
2020/05/04 Javascript
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
Python @property装饰器原理解析
2020/01/22 Python
Expected conditions模块使用方法汇总代码解析
2020/08/13 Python
python 录制系统声音的示例
2020/12/21 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
化学相关工作求职信
2013/10/02 职场文书
公司司机岗位职责范本
2014/03/03 职场文书
2014年纪检工作总结
2014/11/12 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
Python基于百度API识别并提取图片中文字
2021/06/27 Python
解析python中的jsonpath 提取器
2022/01/18 Python
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript