Python学习:基本概念

Python学习:基本概念

一,python的特点:

1,python应用场景多;爬虫,网站,数据挖掘,可视化演示。

2,python运行速度慢,但如果CPU够强,这差距并不明显。

3,严格的缩进式编程

二,python输入

1,print 'hello world',‘Dr’ (中文:# -*- coding: utf-8 -*-申明)

2,raw_input('input:')

三,数据类型

1,类型显示:type() ,数值型和字符型都是不变量

2,转义:\n或r(不转义)

3,布尔类型:and,or,not

4,python 变量是动态变量即:变量所指向类型可变(a=1 a='str'),而Java是静态变量

5,常量

6,字符串编码:ASCLL,Unicode,UTF-8

ASCLL对应一个字节,Unicode对应两个字节,而UTF-8将英文字母被编码成1个字节,汉字通常是3个字节

7,字符串格式化输出  %d %f %s

'Hello, %s' % 'world'

8,集合

1,list用法:  list=[1,2,3] (可变性)

2,tuple元组:t=(1,2,3)   (因为tuple不可变:每个元素,指向永远不变,但指向的对象可变,所以代码更安全)

3,dict:  d={'Bob':15,'John':14}  相当与map,key为不可变量,dict是用空间来换取时间的一种方法

4,set:  set=([1,2,3])

也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合

9,语句

条件: if  age>14: elif:  else:

循环: for num in range(14):  表示(0到13之间的数)

10,函数

1,如果想定义一个什么事也不做的空函数,可以用pass语句,缺少了pass,代码运行就会有语法错误。

2,函数返回:return a 或return a,b,函数执行完毕也没有return语句时,自动return None

3,函数默认参数:def mypow(x,n=2)  调用pow(2) 即可

一是必选参数在前,默认参数在后,否则Python的解释器会报错;

二是:def enroll(name, gender, age=6, city='Beijing'):  调用:enroll('Bob', 'M', 7)或enroll('Adam', 'M', city='Tianjin')都可以

4,可变参数:参数用list或tuple,可变参数允许你传入0个或任意个参数

5,关键字参数:关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
>>> kw = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **kw)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

6,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。

组合用例:

def person(name,age=3,*p,**kw):
print 'name',name,'age',age,'p=',p,'kw=',kw
>>> p=[1,2,3]
>>> kw={'city':'BJ','love':'dog'}
>>>person('Dr',age,*p,**kw)//注意TypeError: person() keywords must be strings kw的key值只允许value

7,递归函数

问题:递归层次过深容易出现栈溢出,解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。

尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

如下所示:

def fact(n):
return fact_iter(n, 1) def fact_iter(num, product):
if num == 1:
return product
return fact_iter(num - 1, num * product)
/*result
===> fact_iter(5, 1)
===> fact_iter(4, 5)
===> fact_iter(3, 20)
===> fact_iter(2, 60)
===> fact_iter(1, 120)
===> 120
*/
/*普通递归*/
===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120

三:参考文献:

  1,廖雪峰官方网址

 
上一篇:关于5303狄惟佳同学的myod程序设计的补充实现


下一篇:Mysql日期和时间函数不求人