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 25 Python
python的类方法和静态方法
Dec 13 Python
Python中的高级数据结构详解
Mar 27 Python
Python正则表达式分组概念与用法详解
Jun 24 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
Python中装饰器学习总结
Feb 10 Python
解决python中使用plot画图,图不显示的问题
Jul 04 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
python之信息加密题目详解
Jun 26 Python
wxPython实现分隔窗口
Nov 19 Python
Python连接mysql方法及常用参数
Sep 01 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/02/08 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
给ECShop添加最新评论
2015/01/07 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
PHP函数超时处理方法
2016/02/14 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
TensorFlow Session会话控制&Variable变量详解
2018/07/30 Python
python对日志进行处理的实例代码
2018/10/06 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
好的自荐信的要求
2013/10/30 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python