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读取注册表中值的方法
Apr 08 Python
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
Python的math模块中的常用数学函数整理
Feb 04 Python
Sanic框架请求与响应实例分析
Jul 16 Python
Python装饰器基础概念与用法详解
Dec 22 Python
python遍历小写英文字母的方法
Jan 02 Python
使用python实现滑动验证码功能
Aug 05 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
什么是python的id函数
Jun 11 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
Jan 27 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基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python动态监控日志内容的示例
2014/02/16 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
python print出共轭复数的方法详解
2019/06/25 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
总经理助理的八要求
2013/11/12 职场文书
医学专业毕业生推荐信
2013/11/14 职场文书
委托书范本
2014/04/02 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书