Python学习总结

本文只是个人学习总结,如有错漏,烦请指正。

1、运行

刚开始学习Python,把程序跑起来才会有成就感,程序猿首先要做的是”Hello World”,在Python中这需要如下代码完成:print("Hello World")
运行Python程序有两种方式:在Python交互环境或者shell环境。
在交互式环境中,直接在控制台输入Python代码,代码会立刻执行并打印结果。

Python 2.7.3 (default, Mar 13 2014, 11:03:55) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello World")
Hello World
>>> 

在shell环境中,需要把Python代码保存到文件中,然后在shell环境中运行python file.py,这样保存在file.py中代码就会执行。

jingy@debianSvr:~$ python test.py
Hello World
jingy@debianSvr:~$ 

2、语法

上面讲了怎么运行Python程序,接下来看看怎么完成Python程序。
如果以前有学习编程语言的经验,会发现各种编程语言都有一些基本的要素如:数据类型,变量、函数、结构的定义,分支、循环语句,常用数据结构的定义(比如数组,字符串)等,顺着教程来看看Python是否也有这些内容。

2.1 数据类型

Python的数据类型有字符串、整型、浮点型、布尔型、数组(list/tuple)、dict和set。
字符串类型:用" "或者' '包含字符串来表示字符串类型,转义符为\,要跨行表示字符串时使用'''跨行的字符串'''
整型:直接用数字表示,如123
浮点型:用小数表示,如3.14,-0.98,位数多时用科学计数法,如3.14e2表示的是3.14*10^-2=0.0314。
布尔型True或者False
数组["test",123,True](list),数组元素可以是不一样的类型,当然同样的类型也是可以的;("S1","S2",333)(tuple),这种数组和list的区别是元素的值不可变,元素类型也要求是不可变类型,所以元素类型不可为list。取元素需用索引号,号码从0开始依次增大,也可以从-1依次减小(从后向前),如list[0]==”test”,list[-2]==123,tuple[2]==333;添加元素方法list.append(“add”):添加元素到list尾部,list.insert(1,”ins”):添加元素到索引为1的位置;删除元素方法list.pop():删除尾部的元素,list.pop(2):删除索引为2的元素。
dict:{“apple”:33,”orange”:22,”banana”:11},取元素方法为dict[“apple”]==33,dict[“orange”]==22,dict[“banana”]==11,添加元素方法为dict[“watermelon”]=44,删除元素方法为dict.remove(“apple”)。
set:([“abc”,”acc”,”acd”]),需要用list来初始化,添加元素用set.add(“bbb”),删除元素用set.remove(“abc”),可以使用&和|对两个set进行交集和并集计算。
基本的数据类型就上面这些,关于这些类型有些细节的地方需要特殊说明下:

  • 整型和浮点型没有位数大小限制,浮点数大到一定数值会用Infinite表示
  • 数组类型的元素也可以是数组,这样就组成了二维数组,多维数组也是这样来组成
  • tuple只有一个元素时要这样来定义:(“one”,)
  • dict和set的key值需为不可变值,list不可作为key值
  • dict和set的key值的类型可以不一样吗?
  • dict和set怎么遍历元素?

附注:
之前漏掉的类型
None类型:表示空,不同于其他任何类型

2.2 变量

Python的变量定义:

a = "ABC"
b = [123,"bbb",True]
c = True
PI = 3.1415926
a = b

和其他编程语言的区别在于不用声明变量的类型,并且变量的类型在代码中是可变的。变量名要求必须是大小写英文、数字和_的组合,且不能以数字开头。

2.3 分支和循环语句

Python的分支语句只有if…elif…else…,循环语句有while(condition)…,for x in list…。

2.3.1 if分支语句

和其他语言一样,if用来做判断分支,Python中if分支的语法如下:

grade = 58
if grade>=80:
    print("优秀")
elif grade>=60:
    print("合格")
else
    print("不合格")

要点有1、if判断的条件后面要加,2、分支下面的代码要用Tab起头

2.3.2 while循环

Python中while循环的语法如下:

sum = 0
i = 0
while True:
    if i>100:
        #结束了整个循环过程
        break
    sum += i
    i = i+1
print("1+2+...+100=%d"%sum) 

要点有1、while判断的条件后面要加:2、while下面要运行的代码要用Tab缩进

2.3.3 for循环

Python中for循环的语法如下:

students=["xiaohua","liming","zhangyang"]
for st in students:
    if st=="zhangyang":
        print("%s is my friend."%st)
        #结束了本次循环过程,继续下一次循环
        continue
    print("%s is my classmate."%st)

要点有1、in后面需要是一个集合类型2、集合后面需要加:3、循环中的代码需要Tab起头

2.3.4 循环的控制(这是硬加的标题)

控制循环主要用break和continue指令,这两个在前面循环的实例中已经有说明,基本上和其他编程语言中的功能一样,break结束整个循环过程,continue结束本次循环过程,继续下一个循环过程。

2.4函数的定义

关于Python的函数有很多内容可以讲,这里只是一个学习笔记,如果想深入学习还是建议看系统的Python教程。根据我的学习经验,我把Python关于函数的内容分为,函数定义的基本语法,函数参数的传递,高阶函数,map,reduce,filter,递归函数,匿名函数。

2.4.1函数定义的基本语法

Python中定义一个函数用以下基本语法:

def func_name(<参数>):
    代码
    return <value>

要点1.def关键字,2函数名后面要有括号括起来的参数列表,参数歌手可以为0,参数不用声明类型,3参数列表的括号后面要加:,4函数代码要用Tab起头,5函数用return来返回值,返回值类型不用声明,默认返回None,可以同时返回多个值。

2.4.2函数参数的传递

上一节已经说明函数参数不用声明类型,实际上函数参数的个数在声明中也可以不用确定,唯一需要确定的就是参数的名称。下面我们来一步步深入,首先定义一个简单的求和函数my_sum:

#计算两个值的和
def my_sum(a,b):
    return a+b

在Python控制台调用:my_sum(123,456),就会打印结果579。这里我们传递了两个参数,调用时也只能传递2个参数,多或者少都会报错。Python函数不限定参数的类型,我们这样调用:my_sum('123','456')也正确,打印结果'123456'。所以这样参数个数确定的函数,只要我们传递的参数类型满足函数内进行的操作,函数调用都会是成功的,这样的参数称之为位置参数
接下来我们需要计算所有输入的和,这种需要下我们事先并不知道有多少个传入参数,这种可以传入可变数量参数的函数定义方法如下:

#计算2个以上值的和
def my_sum(a,b,*cs):
    ret=a+b
    for v in cs:
        ret+=v
    return ret

和基本的函数定义方法的差别主要在参数的声明上,这里用*cs定义的叫可变参数,可变参数是一个可迭代对象,关键点是在参数名前加*表示。这个函数现在要求至少接收2个参数,参数个数不设置上限。这里调用:my_sub(1,2)的结果就为3my_sub(1,2,3)的结果就为6my_sub(1,2,3,4,5)的结果就为15,其计算了所有传入参数的和值。实际上可变参数在函数内部是一个tuple,可以直接传入一个tuple对象,例如:my_sum(1,2,*tuple_name)

Python函数还运行传入带参数名的参数,这种参数叫做关键字参数,带这种参数的函数定义方法如下:

def my_sum(a,b,*cs,**kw):
    ret=a+b
    for v in cs:
        ret+=v
    print(kw[info])
    return ret

上面定义中**kw就是关键字参数,关键点是在参数名前加**表示,调用方法为:my_sum(1,2,3,4,info='Key word Info'),函数会打印Key word Info,函数内部我们通过kw[info]取出info关键字参数的值,实际上关键字参数在函数内部被组成了一个dict,所以可以直接传入一个dict对象而不用再参数列表中逐个的添加,例如:my_sum(1,2,**dict_name)

关键字参数允许传入任何名称的参数,可实际上有时候我们想只传入某些名称的关键字参数,Python也提供了方法,这样的参数叫做命名关键字参数,定义方法如下:

def my_sum(a,b,*cs,info):
    ret=a+b
    for v in cs:
        ret+=v
    print(info)
    return ret

上面的info就是命名关键字参数,要点是此参数前面要有可变参数,没有时要用*号占位一个参数。调用方法为:my_sum(1,2,info='Key word Info'),命名关键字需要传入参数名和值,只传值会报错。

有时候有些参数值多数情况都是一样的,不想每一次都传入,可以为这样的参数设置默认值,举例如下:

#位置参数设置默认值
def power(a,i=2):
    ret=1
    while i > 0:
        ret*=a
        i=i-1
    return ret

#命名关键字参数设置默认值
def power(a,i,*,info='defalut info'):
    ret=1
    while i > 0:
        ret*=a
        i=i-1
    print(info)
    return ret

直接在参数列表中为参数赋值即可,对于位置参数要求无默认值的在前,有默认的在后,命名关键字参数中设置默认值没有这个要求。

2.4.3高阶函数

在Python中,所谓的高阶函数其实就是函数参数中有函数类型,map、reduce和filter就是内建的几个高阶函数。

2.4.3.1map

map函数类似于其他语言中的for_each语意,就是对集合中的每一个元素进行制定的函数操作,返回操作结果的集合。举个例子,想对元组(1,2,3)的每一个元素进行开方运算,使用map函数完成这个操作的方法为:map(lambda x:x**2,(1,2,3)),输出(1,4,9)

2.4.3.2reduce

reduce函数类似于。。。好像没有类似的,其功能是把输入集合依次压入输入的函数进行运算,第一次压入两个,第二次压入前一次的运算结果和第三个,依次类推。举个例子,运算1~10的阶乘,使用reduce函数的方法为:reduce(lambda x,y:x*y,range(1,6)),输出120。

2.4.3.3filter

filter函数根据传入的函数判断返回符合条件的元素。举个例子,我们要筛选出不及格的学生名单,使用filter的方法为:

st={'xiaoming':60,'xiaohua':33,'xiaogang':87,'xiaohong':59}
def jige(v):
    return v[1]<60
filter(jige,st.items())

输出:{('xiaohua',33),('xianghong',59)},这里返回的是set类型。

2.4.4递归函数

自己调用自己的这种函数叫做递归函数。比较经典的递归问题就是汉诺塔,我们用这个问题来说明Python中的递归函数的写法。

#把n块盘子从a柱借助b柱移动到c柱
#和把大象放进冰箱一样,分3步完成:
#1.从a柱移动n-1个盘子到b柱
#2.移动a柱上最后一个盘子到c柱
#3.把b柱上面的n-1个盘子移动到c柱
#这样就把n个盘子从a柱移动到了c柱
def move(n,a,b,c):
    #当只有一块时,直接从a移动到c
    if n==1:
        print(a,'=>',c)
        return
    #从a柱移动n-1块盘子到b柱
    move(n-1,a,c,b)
    #移动a柱上最后一块盘子到c柱
    move(1,a,b,c)
    #把b柱上的n-1块盘子移动到c柱
    move(n-1,b,a,c)
2.4.5匿名函数

有时候一个函数的功能很简单,我们不想特意去定义一个函数,这时候我们可以用匿名函数。Python中的匿名函数用lambda关键字来声明,只能有一个表达式,不需要return,表达式的值就是函数的返回值。举个例子,计算1~100的和:reduce(lambda x,y:x+y,range(1,101)),输出5050。

函数基本内容就是以上这些,还有些高级的功能我暂时也不是很清楚,以后补充。

2.5类的定义

Python可以定义自己的类型,使用关键字class,定义类基本的语法如下:

#要点如下:
#1、使用class关键字
#2、类型名称MyType可以自定义
#3、类名后面加括号,括号中是需要继承的类名,继承的类必须是object或者其派生类
#4、最后面加:
class MyType(object):
    #__init__函数表示构造函数,名称只能是这个,要点有:
    #1、第一个参数一定是self,表示指向自己的对象,名称没有要求,但一般用self
    #2、self后面可以带其他参数
    #3、类的成员可以在这个函数里面初始化
    def __init__(self):
        self.member='default'
    #一般成员函数定义的第一个参数也要是self,可以带其他参数
    def mem_func(self,param):
        pass

基本的定义要求都在上面的例子中进行了说明,Python中的类还有一些高级特性,我们下面来分别看下。

关于Python更加详细的教程可以参考:
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值