python+django+sae

来源:互联网 发布:怎么把淘宝小号养到2心 编辑:程序博客网 时间:2024/06/05 18:51

Python+Django+SAE系列教程2-----Python种的函数、模块和数据结构

原创 2014年03月10日 23:50:05
  • 编辑
  • 删除

我们继续按照著名的《简明 Python 教程》学习,很快的我们学到了第七章。

第七章:这里面介绍了形参、实参、局部变量、Global语句等,这些都和其他语言一样如果你能看懂下面的代码就算Pass了,记住函数是用def定义的。

#!/usr/bin/python# Filename: func_local.pydef func(x):    print 'x is', x    x = 2    print 'Changed local x to', xx = 50func(x)print 'x is still', x

下面我们说一下默认参数和关键参数,这个确实比其他语言牛B。

#!/usr/bin/python# Filename: func_default.pydef say(message, times = 1):#    print message * timessay('Hello')say('World', 5)

以上是默认参数,需要注意的是:只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。
这是因为赋给形参的值是根据位置而赋值的。例如,def func(a, b=5)是有效的,但是def func(a=5, b)是 无效 的。

接下来是关键参数,这个更牛B,参数可以不按照顺序写了:

#!/usr/bin/python# Filename: func_key.pydef func(a, b=5, c=10):    print 'a is', a, 'and b is', b, 'and c is', cfunc(3, 7)func(25, c=24)func(c=50, a=100)

接下来是返回值,在Python中函数无需定义返回值类型,因为Python对变量也没有类型,这就像asp或者js一样,看看下面的函数:

#!/usr/bin/python# Filename: func_return.pydef maximum(x, y):    if x > y:        return x    else:        return yprint maximum(2, 3)

最后是DocStrings,其实就是函数的说明文档,这部分内容有别于注释,注释是给修改你程序的程序员看到,而DocStrings是给调用你写的函数的程序员看的,虽然这两种人往往都是一个人。如果你看懂了上面的几个例子,那么这一章也就可以Pass了。


第八章:这一章介绍了模块,开始看可能有点晕,要不先看看这段代码:
#!/usr/bin/python# Filename: Hemodule.pyif __name__ == '__main__':    MyStr="hemeng in main"else:    MyStr="hemeng in module"def sayhi():    print 'Hi,',MyStrversion = '1.0'# End of mymodule.py

然后是调用这个模块的文件:

#!/usr/bin/python# Filename: hemodule_demo.pyimport Hemodule#Hemodule.MyStr="New String"Hemodule.sayhi()print 'Version', Hemodule.version

能看懂这个也就可以Pass了,但是等会儿,这里面需要说明的有几个关键字:

首先是“字节编译的.pyc文件”,如果一个模块的py文件被另外一个调用后,那么他会自动生成一个同名的pyc文件,你看看你的文件夹是不是多了一个Hemodule.pyc的文件,这就是为了下次再调用的时候提高效率;

然后是“__name__”,每个py文件都有一个“__name__”,如果当他自己独立运行的时候这个“__name__”就是“__main__”,注意使两个下划线;

在往后就是,from..import,就是只导入部分函数和变量,同时可以少打些字

最后,是我自己做的实验,在调用模块的函数中可以改变模块内的变量,我理解的其实就是一个代码段的集合,看起来是“模块名.函数名”,跟对象似的,其实根本没有实例、类这些概念,也就是为了“字节编译的.pyc文件”可以下次再调用的时候加快速度还有就是为了代码的结构更加清楚以及复用。



第九章:这一章首先介绍了列表、元组和字典,跟其他语言也一样,列表用[],元组用(),字典用{},先说说列表,看懂这段代码就可以Pass了:

#!/usr/bin/python# Filename: using_list.py# This is my shopping listshoplist = ['apple', 'mango', 'carrot', 'banana']print 'I have', len(shoplist),'items to purchase.'print 'These items are:', # Notice the comma at end of the linefor item in shoplist:    print item,print '\nI also have to buy rice.'shoplist.append('rice')print 'My shopping list is now', shoplistprint 'I will sort my list now'shoplist.sort()print 'Sorted shopping list is', shoplistprint 'The first item I will buy is', shoplist[0]olditem = shoplist[0]del shoplist[0]print 'I bought the', olditemprint 'My shopping list is now', shoplist

这里面其实也体现了Python的优越性,看到了吧,列表不仅有shoplist.append('rice');del shoplist[0];这些方法,还有排序的方法:shoplist.sort(),c++/js可是没有的呀。接下来是元组,看懂下面代码的也可以Pass了:

#!/usr/bin/python# Filename: using_tuple.pyzoo = ('wolf', 'elephant', 'penguin')print 'Number of animals in the zoo is', len(zoo)new_zoo = ('monkey', 'dolphin', zoo)print 'Number of animals in the new zoo is', len(new_zoo)print 'All animals in new zoo are', new_zooprint 'Animals brought from old zoo are', new_zoo[2]print 'Last animal brought from old zoo is', new_zoo[2][2]

这里是结果:

Number of animals in the zoo is 3
Number of animals in the new zoo is 3
All animals in new zoo are ('monkey', 'dolphin', ('wolf', 'elephant','penguin'))
Animals brought from old zoo are ('wolf', 'elephant', 'penguin')
Last animal brought from old zoo is penguin

如果你猜对了结果,那么你就可以Pass了,补充说一点其实我们用到的打印语句也是元组,记得元组前面有一个“%”,看下面:

#!/usr/bin/python# Filename: print_tuple.pyage = 22name = 'Swaroop'print '%s is %d years old' % (name, age)print 'Why is %s playing with that python?' % name

接下来是字典,字典其实就是组“键值对”:d = {key1 : value1, key2 : value2 },不废话了,看代码:

#!/usr/bin/python# Filename: using_dict.py# 'ab' is short for 'a'ddress'b'ookab = {       'Swaroop'   : 'swaroopch@byteofpython.info',                'Larry'     : 'larry@wall.org',                'Matsumoto' : 'matz@ruby-lang.org',               'Spammer'   : 'spammer@hotmail.com'     }print "Swaroop's address is %s" % ab['Swaroop']# Adding a key/value pairab['Guido'] = 'guido@python.org'# Deleting a key/value pairdel ab['Spammer']print '\nThere are %d contacts in the address-book\n' %len(ab)for name, address in ab.items():    print 'Contact %s at %s' % (name, address)if 'Guido' in ab: # OR ab.has_key('Guido')    print "\nGuido's address is %s" % ab['Guido']

这里是结果:

Swaroop'saddress is swaroopch@byteofpython.info

There are 4 contacts in the address-book

Contact Swaroop at swaroopch@byteofpython.info
Contact Matsumoto at matz@ruby-lang.org
Contact Larry at larry@wall.org
Contact Guido at guido@python.org



Guido's address is guido@python.org

是不是和其他的语言一样,这里需要注意的是:我们可以使用in操作符来检验一个键/值对是否存在,或者使用dict类的has_key方法。你可以使用help(dict)来查看dict类的完整方法列表。

除了以上三个列表、元组和字典以外本章还介绍了“序列”, 列表、元组和字符串都是序列,说白了只要看到这样“shoplist[0]”,后面有“[i]”的都是序列,下面我讲讲序列的操作,这是也是Python特点的体现,还是直接看代码:

#!/usr/bin/python# Filename: seq.pyshoplist = ['apple', 'mango', 'carrot', 'banana']# Indexing or 'Subscription' operationprint 'Item 0 is', shoplist[0]print 'Item 1 is', shoplist[1]print 'Item 2 is', shoplist[2]print 'Item 3 is', shoplist[3]print 'Item -1 is', shoplist[-1]# banana,倒数第一个print 'Item -2 is', shoplist[-2]# carrot,倒数第二个# Slicing on a listprint 'Item 1 to 3 is', shoplist[1:3] ['mango', 'carrot'],第一个到第三个以前print 'Item 2 to end is', shoplist[2:]# ['carrot', 'banana']倒数第二个到最后print 'Item 1 to -1 is', shoplist[1:-1]#第一个到倒数第一个以前print 'Item start to end is', shoplist[:]#所有# Slicing on a stringname = 'swaroop'print 'characters 1 to 3 is', name[1:3]print 'characters 2 to end is', name[2:]print 'characters 1 to -1 is', name[1:-1]print 'characters start to end is', name[:]

只要几个[]中间如果“:”后面有数字,那么就不包括那一个,而是“以前的数”就OK了。下面说明了对象与参考,这就像C++里面的指针,也很好理解,看看代码:

#!/usr/bin/python# Filename: reference.pyprint 'Simple Assignment'shoplist = ['apple', 'mango', 'carrot', 'banana']mylist = shoplist # mylist is just another name pointing to the same object!del shoplist[0]print 'shoplist is', shoplistprint 'mylist is', mylist# notice that both shoplist and mylist both print the same list without# the 'apple' confirming that they point to the same objectprint 'Copy by making a full slice'mylist = shoplist[:] # make a copy by doing a full slicedel mylist[0] # remove first itemprint 'shoplist is', shoplistprint 'mylist is', mylist# notice that now the two lists are different
结果是这样的:

Simple Assignment
shoplist is ['mango', 'carrot', 'banana']
mylist is ['mango', 'carrot', 'banana']
Copy by making a full slice
shoplist is ['mango', 'carrot', 'banana']
mylist is ['carrot', 'banana']


下面还有很多关于字符串的操作,也是Python特有“聪明”的体现:
#!/usr/bin/python# Filename: str_methods.pyname = 'Swaroop' # This is a string object if name.startswith('Swa'):    print 'Yes, the string starts with "Swa"'if 'a' in name:    print 'Yes, it contains the string "a"'if name.find('war') != -1:    print 'Yes, it contains the string "war"'delimiter = '_*_'mylist = ['Brazil', 'Russia', 'India', 'China']print delimiter.join(mylist)

这里,我们看到使用了许多字符串方法。startwith方法是用来测试字符串是否以给定字符串开始。in操作符用来检验一个给定字符串是否为另一个字符串的一部分。

find方法用来找出给定字符串在另一个字符串中的位置,或者返回-1以表示找不到子字符串。str类也有以一个作为分隔符的字符串join序列的项目的整洁的方法,它返回一个生成的大字符串。

说明一下join这样方法在我们构造Json对象的时候超级好用。



第十章:主要介绍了一个使用zip的例子,说明了一下开发程序的过程,我们可以忽略了,因为我们后来要做的例子,要比这个有大的多。


待续。。。







阅读全文
  • 本文已收录于以下专栏:
HTML/XML objective-c Delphi Ruby PHP C# C++ JavaScript Visual Basic Python Java CSS SQL 其它

[Django实战] 第9篇 - 表单、视图、模型、模板的交互

本章通过实现一个用户提交任务请求的页面,讲述表单、视图、模型、模板间的交互。首先,我们需要定义一个表单(forms.py)class CreatetaskForm(forms.Form):...
  • u010415792
  • u010415792
  • 2013年09月16日 17:37
  • 6000

Python+Django+SAE系列教程3-----Python中的面向对象编程

Python+Django+SAE系列教程3-----Python中的面向对象编程
  • hemeng
  • hemeng
  • 2014年04月15日 09:57
  • 1786

Python+Django+SAE系列教程11-----request/pose/get/表单

Python+Django+SAE系列教程11-----request/pose/get/表单
  • hemeng
  • hemeng
  • 2014年05月07日 19:09
  • 2709

Python+Django+SAE系列教程14-----使表单更安全

Python+Django+SAE系列教程14-----使表单更安全
  • hemeng
  • hemeng
  • 2014年05月08日 19:40
  • 1710

Python+Django+SAE系列教程12-----配置MySQL数据库

Python+Django+SAE系列教程12-----配置MySQL数据库
  • hemeng
  • hemeng
  • 2014年05月07日 19:48
  • 4799

Python+Django+SAE系列教程15-----输出非HTML内容(图片/PDF)

Python+Django+SAE系列教程15-----输出非HTML内容(图片/PDF)
  • hemeng
  • hemeng
  • 2014年06月06日 11:57
  • 3321

Python+Django+SAE系列教程1-----Python环境和基本语法

由于本系列内容是基于SAE的,目前SAE支持的Python版本是2.7.3,所以我们先安装这个版本的Python,下载地址:http://www.skycn.com/soft/appid/10554....
  • hechurui
  • hechurui
  • 2014年03月28日 14:37
  • 1992

Python+Django+SAE系列教程1-----Python环境和基本语法

Python+Django+SAE系列教程1-----Python环境和基本语法
  • hemeng
  • hemeng
  • 2014年03月10日 23:40
  • 2629

Python+Django+SAE系列教程6-----本地配置Django

Python+Django+SAE系列教程6-----本地配置Django
  • hemeng
  • hemeng
  • 2014年04月21日 16:53
  • 2757

Python+Django+SAE系列教程10-----Django的模板

Python+Django+SAE系列教程10-----Django的模板
  • hemeng
  • hemeng
  • 2014年04月21日 17:32
  • 2272

相关推荐

  • [Django实战] 第9篇 - 表单、视图、模型、模板的交互
  • Python+Django+SAE系列教程3-----Python中的面向对象编程
  • Python+Django+SAE系列教程11-----request/pose/get/表单
  • Python+Django+SAE系列教程14-----使表单更安全

他的热门文章

  • 微信公共服务平台开发(.Net 的实现)2-------获得ACCESSTOKEN
    13273
  • 微信公共服务平台开发(.Net 的实现)1-------认证“成为开发者”
    12222
  • 云计算概念以及六大云平台对比---------开发者如何选型不同的云
    10257
  • 微信公共服务平台开发(.Net 的实现)5-------解决access_token过期的问题
    8476
  • 微信公共服务平台开发(.Net 的实现)3-------发送文本消息
    8003
  • 不良信息举报
    您举报文章:Python+Django+SAE系列教程2-----Python种的函数、模块和数据结构 举报原因:
    原文地址: 原因补充:

    (最多只允许输入30个字)