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模块顶层运行的代码引起的一个Bug
Jul 04 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
python变量的存储原理详解
Jul 10 Python
Python代理IP爬虫的新手使用教程
Sep 05 Python
python命令 -u参数用法解析
Oct 24 Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 Python
Django框架安装及项目创建过程解析
Sep 14 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 Python
Pytest中conftest.py的用法
Jun 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中使用PDF文档功能
2006/10/09 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
JS中表单的使用小结
2014/01/11 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
jquery选择器中的空格与大于号>、加号+与波浪号~的区别介绍
2016/06/24 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
如何快速上手Vuex
2017/02/14 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
Android分包MultiDex策略详解
2017/10/30 Python
django静态文件加载的方法
2018/05/20 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
python实现动态创建类的方法分析
2019/06/25 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
北大自主招生自荐信
2013/10/19 职场文书
大学军训自我鉴定
2013/12/15 职场文书
人民教师求职自荐信
2014/03/12 职场文书
入股协议书范本
2014/04/14 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
青年文明号创建口号大全
2015/12/25 职场文书