函数
调用函数
定义函数
函数的参数
切片
迭代
列表生成表达式
数据库的连接
函数
# -*- coding: utf-8 -*-
import math
def area(r):
area=r**2*math.pi
return area
r=input(u'请输入圆的半径')
print "The circle of area is %d"%area(r)
调用函数
a=abs(-1) print a print cmp(1,2) print cmp(2,1) print cmp(2,2) b=int('123') print b c=str(123) print c d=unicode(100) print d e=bool('') print e f=int(float('12.34')) print f
定义函数
空函数:pass语句用来做占位符,先使程序可以运行起来
def nop(): pass
if age>=0: pass
定义取绝对值函数
# -*- coding: utf-8 -*- def my_abs(x): if not isinstance(x,(int ,float)): raise TypeError('bad operand type') if x>=0: return x else: return -x x=input(u'请输入要取绝对值的数') print my_abs(x)
定义获取坐标的函数(坐标中心在左上角)
import math def move(x,y,step,angle=0): nx=x+step*math.cos(angle) ny=y-step*math.sin(angle) return nx,ny x,y=move(100,100,80,math.pi/6) print x,y r=move(100,100,80,math.pi/6) print r
函数的参数
def power(x,n=2)(默认参数n=2) s=1 while n>0: n=n-1 s=s*x return s a=power(5,5) print a b=power(5) print b
默认参数必须指向不变对象!因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。
def add_end(L=None)(str 与None是不变对象) if L is None: L=[] L.append('END') return L print add_end([1,2,3]) print add_end()
可变参数(传入的参数个数是可变的)
def cacl(*numbers): sum=0 for n in numbers: sum=sum+n*n return sum print cacl(1,2,3,4) a=[1,2,3,4,5] print cacl(*a)
关键字参数
def person(name,age,**kw): print 'name',name,'age',age,'other',kw person('M',30) person('B',12,city='beijing') person('C',34,gender='M',job='Engineer') kw={'city':'beijing','job':'Engineer'} person('D',50,**kw)
参数组合(在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。)
def person(name,age,gender='M',*args,**kw): 定义一个函数,包含上述4种参数 print 'name=',name,'age=',age,'gender=',gender,'args=',args,'kw=',kw person('Jack',20,'W',1,2,4,x=99) 函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。 args=(1,2,3,4) kw={'x':99} person(*args,**kw) 通过一个tuple和dict,你也可以调用该函数
对于任意函数,都可以通过类似func(*args, **kw)
的形式调用它,无论它的参数是如何定义的
*args
是可变参数,args接收的是一个tuple;
**kw
是关键字参数,kw接收的是一个dict。
L = []
L = range(1,100,2)
print L
切片
L=range(100)
print L
print L[:10]前10个数
print L[-10:]后10个数 L[-50:55]等价于L[50:55] L[45:-35]等价于L[45:65]
print L[10:20]前11-20的数
print L[:10:2]前10个数,每两个取一
print L[::5]所有数,每5个取一
print L[:]
T=(1,2,3,4,5,6,7,8,9)tuple与str相同
print T[:3]
S='ABCDEFG'
print S[:3]
迭代
d={'a':1,'b':2,'c':3}
for value in d.itervalues():
print value
for key in d:
print key
for ch in 'ABC':
print ch
from collections import Iterable
print isinstance('abc',Iterable)
print isinstance(123,Iterable)
print isinstance([1,2,3],Iterable)
print isinstance((1,2,3),Iterable)
for i,value in enumerate(['A','B','C']):
print i,value
for x,y in [(1,1),(2,2),(3,3)]:
print x,y
列表生成表达式
练习实例
字符串日期转换为易读的日期格式。(pip install python-dateutil)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from dateutil import parser
dt = parser.parse("Aug 28 2015 12:00AM")
print dt
数据库的连接
Username postgers
Password postgers
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import psycopg2
username=raw_input(u'请输入用户名')
password=raw_input(u'请输入密码')
key=0
# 数据库连接参数
conn = psycopg2.connect(database="test", user="postgres", password="postgres", host="127.0.0.1", port="5432")
cur = conn.cursor()
cur.execute("SELECT * FROM test;")
rows = cur.fetchall() # all rows in table
print(rows)
for i in rows:
if username==i[1] and password==i[2]:
print '登陆成功'
key=1
break
if key==0:
print '登陆失败'
conn.commit()
cur.close()
conn.close()