PYTHON入门(二)
来源:互联网 发布:js utc转换 gmt 8000 编辑:程序博客网 时间:2024/05/21 21:41
继续跨PYTHON大门
第一篇入门文章写了一些python支持的一些基本特性,这一篇则是作为PYTHON入门(一)的续篇,在稍微高一点的层次上,帮助进行正式的入门
一、函数
- 函数通过def关键字定义,通过一个简单的例子迅速说明情况:
#!/usr/bin/python2def Hello(): print "helloO0OooO0oo"Hello()
上面简短的代码即完成了一个函数的定义和调用,输出结果自己想象
- 那不说废话,直接上形参,给函数一个输入口
#!/usr/bin/python2def Hello(s1,s2): print "helloO0OooO0oo",s1,s2Hello("1",'ok')Hello(2,'not ok')
输出的结果也是很容易想象到的:
root@hlf-virtual-machine:/home/hlf/mnt# ./hello.pyhelloO0OooO0oo 1 okhelloO0OooO0oo 2 not ok
- 局部变量
#!/usr/bin/python2def Hello(x): print "global i=",x i=222 print "local i=",ii=555Hello(i)print "global i=",i
输出结果为:
global i= 555local i= 222global i= 555
此代码以变量i为例,展示了局部变量i和全局变量i之间并不会相互干扰
- 若想要在函数里改变外面变量的值,则需要通过global的方式,在上个代码的基础上,只添加一句话即可:在定义函数的时候,加一个
global i
def Hello(x): print "global i=",x global i i=222 print "local i=",i
这样,这个i就和外面的那个i连接在一起了,就可以读取和改变外面的变量i的值了
- 定义函数拥有默认参数值
#!/usr/bin/python2def Hello(ss,i=2): print ss*iHello("O")Hello("O",5)
这个默认复制次数是2,可以更改为5,自己想象
需要注意的是,只有形参表后面的可以有默认值,即不能在函数声明形参的时候,先声明有默认值的,def Hello(ss="O",i):
这就是错的
- 定义函数使用关键参数
假如一个函数拥有很多参数,大部分参数希望使用默认值,而只想改动其中一两个参数的值的时候,可以通过名称对特定参数进行赋值,这样也就不必担心调用函数时参数的顺序了
#!/usr/bin/python2def Hello(a,b=2,c=3): print a,b,cHello(1)Hello(1,0)Hello(1,c=0) ; Hello(c=0,a=1)
输出的结果毫无悬念:
1 2 31 0 31 2 01 2 0
- return返回函数值
以一个例子迅速带过:
#!/usr/bin/python2def Hello(a,b,c): return a+b+cprint Hello(1,2,3)
- python函数有个有趣的docstrings ,可以看成是对函数的一种注释吧,但是外界调用这个函数的时候,可以将这个注释很方便的调用出来处理,举个栗子:
#!/usr/bin/python2def printMax(x,y): '''---------------------------------- max ----------------------------------''' if x > y: print x else: print yprintMax(3,5)print printMax.__doc__
关注点在最后一行,很方便的就将里面的文档说明给打印出来了,输出的结果为:
5---------------------------------- max ----------------------------------
当然我这种编写方式是乱写的,别人建议的文档说明编写格式为:第一行首字母大写,第二行空白,从第三行开始是详细描述,最后以句号结尾
二、模块
如果想要在其他程序中重用很多函数,那么就使用模块吧。模块基本上就是一个包含了所有定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。
- 导入模块
#!/usr/bin/python2import sysfor i in sys.argv: print i
输出的结果为:
root@hlf-virtual-machine:/home/hlf/mnt# ./hello.py hello world
./hello.py
hello
world
可以看见程序import了一个sys模块,sys.argv的第0个元素就是名称,第一个元素是hello,第二个……
还可以打印出sys.path,是一堆路径,我理解的是在这些路径下才可以使用sys模块
- name属性
独自运行的python程序name为main,若是被调用的话,则不是main,hello.py内容如下:
#!/usr/bin/python2if __name__=="__main__": print "main"else: print "not main"
例如,在shell中输入python2进入python命令行,在命令行中输入import hello
,则输出not main
,直接在shell中执行python2 hello.py
,则可以输出main
- 创建自己的模块
创建模块,hello.py内容如下:
#!/usr/bin/python2def string(): print "hello"def num(a,b): print a+bversion="1.0.0"
调用模块,新建一个main.py
#!/usr/bin/python2import hellohello.string() hello.num(1,2) print hello.version
通过命令chmod a+x main.py
给新文件权限,然后执行./main.py
,即可看到理想的结果
- 简化调用
将上个main.py程序可以进行简化,编写起来更舒心一些,main.py内容如下:
#!/usr/bin/python2from hello import string,num,versionstring() num(1,2) print version
- dir()函数,用于查看属性信息
在保留上述hello.py文件的基础上,从shell输入python2进入python命令行,在python命令行下,dir()函数可以看到当前导入的模块,以及dir(hello)的时候,可以查看hello.py内部的函数和变量>>> dir()
[‘builtins‘, ‘doc‘, ‘name‘, ‘package‘]
>>> import hello
>>> dir()
[‘builtins‘, ‘doc‘, ‘name‘, ‘package‘, ‘hello’]
>>> dir(hello)
[‘builtins‘, ‘doc‘, ‘file‘, ‘name‘, ‘package‘, ‘num’, ‘string’, ‘version’]
四、数据结构
- 1.列表list
如果存在一个list,就可以随意的添加、删除和搜索列表中的项目,由于可以添加和删除,所以列表这种数据类型是可以被改变的 - list的创建
num_list=[22,33,55,77,99]
num_list=[22,33,55,77,[1,2,3]]
用len(num_list)可以获取列表长度
列表里甚至可以放一个别的列表
- list的创建
- list类下的append方法
num_list.append(66)
num_list.append([1,2,3])
用于追加项目
- list类下的append方法
- del删除list的项目
del num_list[0]
删除指定位置的列表元素
- del删除list的项目
- list类下的sort方法
num_list.sort()
用于将列表分类排序
- list类下的sort方法
- 打印列表中的元素
for i in num_list: print i
作为入门的话,列表的其他东西就先暂时不去看了,详细的list下的函数可以在python命令行里输入help(list),查看详细,再按按键Q可以退出help
- 2.元组
元组与列表十分相像,最大的区别就是元组是不可修改的 - 元组的创建
num_list=((1,2,3),22,33,55,77,99)
就是括号变了而已
- 元组的创建
- 元组的访问
num_list[0][1]
值是2
- 元组的访问
- 只有1个元素和0个元素的特殊情况的定义
num_list=()
num_list=(1,)
- 只有1个元素和0个元素的特殊情况的定义
- 元组通常用于打印
s="\"hi\""j=99print "s=%s,i=%d"%(s,j)
- 3.字典dict
个人理解就是键-值对,详细函数可以在python命令行里输入help(list) - 创建字典
num_list={"name ":"hlf","paswd":1234,11111:888}
len依然可以查看长度
- 创建字典
- 利用字典dict的items方法,打印出所有键值对
for name,addr in num_list.items(): print name,":",addr
- 依然是用del,删除元素
del num_list["paswd"]
- 依然是用del,删除元素
五、数据序列和引用
- 1.序列索引
假如有这样一个list:num_list=[11,22,33,44,55]
- 这样索引的结果是毫无疑问的:
num_list[0]=11
num_list[1]=22
- 这样索引的结果是毫无疑问的:
- 当然还可以反向进行索引,从尾部开始:
num_list[-1]=55
num_list[-2]=44
- 当然还可以反向进行索引,从尾部开始:
2.序列切片
序列切片,从名字就可以想象出功能了,即取出序列的一部分,元组、列表、字符串都是适用的num_list[1:3]=[22,33]
从位置1开始,止于位置3(不包含位置3)num_list[1:-2]
同上num_list[:3]=[11,22,33]
默认从位置0开始num_list[1:]=[22,33,44,55]
默认到最后结束3.对象与引用
看下面一段代码:
#!/usr/bin/python2num_list=[11,22,33,44,55]num1=num_listnum2=num_list[:]del num_list[0]print num1print num2
按照其他编程语言的理解的话,num1和num2应该是一样的
但是在python中,这个num1=num_list
语句并不是赋值,只是给num_list(名称)引用的对象,增加一个num1(名称)而已,这样就相当于num1和num_list名称引用的是同一个对象,再通俗一点理解就是把这两个东西绑定在了一起
而num2=num_list[:]
这个语句才是将num_list中的数据拷贝到一个新num2中,也就是真正意义的赋值吧
这样一说的话,应该就可以猜出上面代码的num1和num2的输出结果了吧,num1=[22,33,44,55],num2=[11,22,33,44,55]
额,看来两批还是写不完呀,到这里的话,python基本的操作应该就已经没问题了,到现在都是根据函数和语句块设计程序(面向过程),还有一种把数据和功能结合的面向对象的编程理念。在编写大型程序或是寻求一个更加合适的解决方案的时候,面向对象的编程就很适合了,还要python入门(三)做一下入门的最后一步
- python入门(二)
- python入门(二)
- python入门(二)
- Python 入门(二)
- Python入门(二)
- Python入门(二)
- PYTHON入门(二)
- Python入门笔记(二)
- Python入门(二,基础)
- python入门学习(二)
- python 入门笔记(二)
- python入门经典(二)
- python入门学习(二)
- Python入门基础(二)
- Python入门基础(二)
- Python入门篇(二)
- Python 快速入门(二)
- 【python入门笔记】(二)python基础
- 2017_12_01 echarts+springboot+mybatis(动态获取数据饼图+gl三维demo)
- 关系型数据库连接表的几种方式
- druid配置,以及应用
- gcc常用命令简介
- 视频开发(二) FFMPEG简介
- PYTHON入门(二)
- CentOS 7.0安装hive2.1.1
- ajax请求 Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-ext
- 51Nod
- 对ASCII码的一些应用
- android6.0 一个pin码设置-加密-存储 跟踪
- jsonp
- 详解HttpURLConnection
- fastjson 使用方法