Python Fundamental for Django
Strings
>>> s = 'django is cool'
>>> words = s.split()
>>> words
['django', 'is', 'cool']
>>> ' '.join(words)
'django is cool'
>>> s.count('o')
3
>>> s.find('go')
4
>>> s.replace('django', 'python')
'python is cool'
一些常用的string函数:
| string method | description |
|---|---|
| count | Number of occurrences of substring in string |
| find | Search for substring [also see index, rfind, rindex] |
| join | Merge substrings into single delimited string |
| replace | Search and replace (sub)string |
| split | Split delimited string into substrings [also see splitlines] |
| startswith | Does string start with substring [also see endswith] |
| strip | Remove leading and trailing whitespace [also see rstrip, lstrip] |
| title | Title-case string [also see capitalize, swapcase] |
| upper | UPPERCASE string [also see lower] |
| isupper | Is string all UPPERCASE? [also see islower, and so forth] |
格式化输出:
>>> '%s is number %d' % ('python', 1)
'python is number 1'
>>> hi = '''hello
baby'''
>>> hi
'hello\nbaby'
>>> print hi
hello
baby
Tuples
tuple里面的元素不能被修改,这与它本身的实现机制有关,在传递参数的时候如果不希望参数被修改也是一种不错的选择。
>>> a = ('one', 'two')
>>> a[0]
'one'
>>> c = ('only',)
>>> c[0]
'only'
>>> d = 'only',
>>> d[0]
'only'
这里需要注意的是声明一个tuple的时候关键是逗号,如果没有下面的例子就只是一个string,注意到这个非常重要,因为很多django的数据类型用的都是tuple:
>>> b = ('only')
>>> b[0]
'o'
Dictionaries
字典是一种有点像哈希表的列表,里面的元素有key和value两个属性。字典的元素可以修改,无序,且大小可以变化。如:
>>> book = {'title':'django', 'year':2008}
>>> 'title' in book
True
>>> book.get('pub', 'N/A')
'N/A'
>>> book['pub'] = 'Addision'
>>> book.get('pub', 'N/A')
'Addision'
>>> for key in book:
... print key, ':', book[key]
...
year : 2008
title : django
pub : Addision
一些常用函数:
| Dictionary Method | Description | |
|---|---|---|
| keys | Keys (also see iterkeys) | |
| values | Values (also see itervalues) | |
| items | Key-value pairs (also see iteritems) | |
| get | Get value given key else default [also see setdefault, fromkeys] | |
| pop | Remove key from dict and return value [also see clear, popitem] | |
| update | Update dict with contents of (an)other dict |
Enumerate
>>> data = enumerate((123, 'abc', 'hello')) >>> for i, value in data: ... print i, value ... 0 123 1 abc 2 hello
Exception Handling
如尝试打开文件的异常处理:
try:
f = open(filename, 'r')
except IOError, e:
return False, str(e)
也可以把多种错误类型放到一个tuple里面,一次过检测:
try:
process_some_data()
except (TypeError, ValueError,...), e:
print "ERROR ", e
当然也可以对不同类型的异常用不同的处理方法,在最后一种情况通常加上一种Exception,因为这样可以包括所有的异常情况:
try:
...
except (TypeError, ValueError), e:
...
except ArithmeticError, e:
...
except Exception, e:
...
Files
>>> f = open('test.txt', 'w')
>>> f.write('foo\n')
>>> f.write('bar\n')
>>> f.close()
>>> f = open('test.txt', 'r')
>>> for line in f:
... print line.rstrip()
...
foo
bar
>>> f.close()
Anonymous Functions
匿名函数使用关键字lambda,由一个表达式组成,代表函数的返回值。通常的使用方式:
lambda args: expression
sorted(list_of_people, key = lambda person: person.last_name)
# 等价于
def get_last_name(person):
return person.last_name
sorted(list_of_people, key = get_last_name)
* args and ** kwargs
python里面的*不是C语言里面的指针,作为参数传递时,* 表示一个tuple(list), ** 表示dict
例子如下:
def check_web_server(host, port, path):
...
调用函数的时候一般用法:
check_web_server('127.0.0.1', 8080, '/admin/')
如果把参数作为一个tuple或者dict的形式,可以通过下标的形式传递参数,但是用 * 的方式可以非常方便的完成传参:
host_info = ('www.python.org', 80, '/')
check_web_server(host_info[0],host_info[1], host_info[2])
check_web_server(*host_info)
host_info = {'host': 'www.python.org', 'port': 80, 'path': '/'}
check_web_server(**host_info)
动态实例化
与其他的一些编程语言不同,python支持类的动态的实例化,如:
>>> class Book(object):
... def __init__(self, name):
... self.name = name
...
>>> john = Book('John')
>>> john.father = 'Jack'
>>> print john.father
Jack

浙公网安备 33010602011771号