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中global与nonlocal比较
Nov 21 Python
Python中的urllib模块使用详解
Jul 07 Python
玩转python爬虫之cookie使用方法
Feb 17 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
python要安装在哪个盘
Jun 15 Python
python脚本和网页有何区别
Jul 02 Python
如何向scrapy中的spider传递参数的几种方法
Nov 18 Python
详解Python模块化编程与装饰器
Jan 16 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分页函数代码(简单实用型)
2010/12/02 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
date.parse在IE和FF中的区别
2010/07/29 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python利用ansible分发处理任务
2015/08/04 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
python opencv之分水岭算法示例
2018/02/24 Python
Python文件读写常见用法总结
2019/02/22 Python
python 实现识别图片上的数字
2019/07/30 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
Python中logger日志模块详解
2020/08/04 Python
python如何使用腾讯云发送短信
2020/09/17 Python
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
2016年元旦主持词
2015/07/06 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
分享几种python 变量合并方法
2022/03/20 Python