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交换变量
Sep 06 Python
python提取字典key列表的方法
Jul 11 Python
Python中动态创建类实例的方法
Mar 24 Python
基于python时间处理方法(详解)
Aug 14 Python
python爬虫爬取网页表格数据
Mar 07 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
pandas中ix的使用详细讲解
Mar 09 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
python matplotlib库的基本使用
Sep 23 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 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
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
第1次亲密接触PHP5(1)
2006/10/09 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
php轻松实现文件上传功能
2016/03/03 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
javascript Select标记中options操作方法集合
2008/10/22 Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
python opencv摄像头的简单应用
2019/06/06 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
如何提高MySql的安全性
2014/06/19 面试题
社区端午节活动方案
2014/01/28 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
2014年城管工作总结
2014/11/20 职场文书
听证通知书
2015/04/24 职场文书
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
分享几个实用的CSS代码块
2022/06/10 HTML / CSS