Python学习:基本概念
一,python的特点:
1,python应用场景多;爬虫,网站,数据挖掘,可视化演示。
2,python运行速度慢,但如果CPU够强,这差距并不明显。
3,严格的缩进式编程
二,python输入
1,print 'hello world',‘Dr’ (中文:# -*- coding: utf-8 -*-申明)
2,raw_input('input:')
三,数据类型
1,类型显示:type() ,数值型和字符型都是不变量
2,转义: 或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,廖雪峰官方网址