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类下的append方法
      num_list.append(66)
      num_list.append([1,2,3])
      用于追加项目
    • del删除list的项目
      del num_list[0]
      删除指定位置的列表元素
    • list类下的sort方法
      num_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,)
    • 元组通常用于打印
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"]

五、数据序列和引用

  • 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入门(三)做一下入门的最后一步

原创粉丝点击