python自学笔记(一)

来源:互联网 发布:不属于流程优化原则 编辑:程序博客网 时间:2024/05/29 16:43
一.简介

Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。
有点是简介
缺点1:运行速度慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢,但是是相对的,考虑到网络的带宽延迟的可以忽略

缺点2:无法加密,当然,现在如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有无数非常优秀的像Linux一样的开源代码,我们千万不要高估自己写的代码真的有非常大的“商业价值”。那些大公司的代码不愿意开放的更重要的原因是代码写得太烂了,一旦开源,就没人敢用他们的产品了。

二.python编程
2.1 第一个python程序

2.2 输入输出
现在,你已经可以用print输出你想要的结果了。但是,如果要让用户从电脑输入一些字符怎么办?Python提供了一个raw_input,可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字:

2.3 python基础
整数、浮点数 略
字符串 一般用’ “ :
例: ‘i am ok’           ———>i am ok
“ i’m ok”                   ———>i’m ok
'I\'m \"OK\”!’———> I’m “OK”!

unicode码

>>> print u'中文'
中文
>>> u'中'
u'\u4e2d'



写u'中'和u'\u4e2d'是一样的,\u后面是十六进制的Unicode码。因此,u'A'和u'\u0041'也是一样的。


两种字符串如何相互转换?字符串'xxx'虽然是ASCII编码,但也可以看成是UTF-8编码,而u'xxx'则只能是Unicode编码。


把u'xxx'转换为UTF-8编码的'xxx'用encode('utf-8')方法:
>>> u'ABC'.encode('utf-8')
'ABC'
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'

格式化

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'




你可能猜到了,%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。


常见的占位符有:


%d

整数

%f

浮点数

%s

字符串

%x

十六进制整数

2.4 使用list和tuple
list有点类似数组,
classmate=[‘wyz’,’sbq’,’jzh’,’xm’]
此时变量classmate就是个list,len(classmate)可以获取list长度,classmate(0)-(3可以获取list里具体的值


或者直接print classmate[-1] 就是最后一个值,xm
以此类推,倒数第二个就是-2 、-3等等

当然list也是个可变的有序表,所以可以在list后面追加append()
classmate.append(‘gl’)

如果要删除最后末尾的元素,用pop()
classmate.pop() 默认删除的是最后一个末尾,当然可以指定删除哪一个classmate.pop(i)
i要在范围内

list里的类型也可以是其他的
如L = [‘wyz’ ,100 ,true]
也可以嵌套成二维数组一样
s=[‘java’ ,’asp’, [‘c’,’python],’go’]
其中s[2][1]=c
s[2][2]=python

tuple
另一种有序列表叫元组,
tuple和list非常相似,但是tuple一旦初始化就不能修改,不能像list一样append,pop,insert
tuple是声明是用(),list声明使用[]
例如t=(‘a’,’b’,[‘A’,’B’])
t中t(0),t(1)都是无法改变的,但是t(2)其实是个list,所以t[2][0]和t[2][1]是可以变化的。


2.5 条件判断和循环
条件判断
if用来条件判断,else输出不符合要求的结果,中间可以加elif多一重判断,当然完全可以有n个elif,elif是else if的缩写

但是if有个缺点,遍历过程是自上而下的,如果出现了ture的结果,后面的就不会去判断了。
如下图,20岁直接被认为是kid就是因为这个道理


循环
python的循环有两种,一种是for...in的循环,一次把list或者tuple中的元素遍历出来


所以for i in就是把每个元素都遍历进变量i

python提供了range函数,比如range(100)就是从0至100的整数


第二种循环是while循环,只要满足条件就不退出一直循环,条件不满足时自动退出循环
比如计算100以内奇数的和


2.6 使用dict和set
dict是dictionary的缩写,可以简化list和tuple的组合
例如names=[‘wyz’,’sbq’,’jzh’]
scores=[99,89,79]
我们可以用dict来实现这两个list的组合查询
d={‘wyz’:99,’sbq’:89,’jzh’:79}
则d[‘wyz’]=99


查询dict的key值是否存在有两种方法
一是直接用in方法
‘xjf’ in dcit

二是用get的方法


总结和list相比dict查询和插入删除速度更快,但是占用更多内存。dict是通过hash算法根据key来计算vaule的,所以相比list而言dict的value是不可变的,否则内存就会混乱

set和dict类似,也是一组key的集合但是没有value


三. 函数
3.1 调用函数
python里有很多有用的函数,我们可以直接调用
https://docs.python.org/2/library/functions.html#abs是python官网的函数解释
例如调用绝对值函数abs()

比较函数cmp(x,y),如果x<y,返回-1;x>y,返回1;x==y,返回0

int()转换为整数


3.2 定义函数
在python中定义函数需要def语句,然后在缩进块中编写函数体,返回值用return语句返回
例如定义一个my_abs(x)的函数

上图定义的my_abs(x)和内置的abs()看似没区别,脱裤子放屁多余,但是还是有实质区别的,函数会识别里面的参数的可用性,例如abs(‘A’)就会报错,因为内置abs里的参数不能是字符串,但是my_abs(‘A’)结果就是A

3.3 函数的参数
定义一个x平方的函数

当然可以定义n次方的,可以利用两个参数


可变参数
可变参数顾名思义其参数是可变的,不是固定的,写法是在前面加个*号
比如正常情况下计算
a平方+b平方+c平方+...
def calc(numbers)
    sum=0
    for n in numbers:
        sum=sum+n*n
    return sum
但是调用的时候需要先组装一个list或者tuple
numbers((1,2,3,))
或者numbers([1,2,3])
如果定义函数的时候使用可变参数def calc(*numbers)
则调用的时候可以直接用numbers(1,2,3)来使用。

关键字参数
写法是前面加**
*args是可变参数,args接收的是一个list或者tuple
**kw是关键字参数,kw接收的是一个dict。
可变参数既可以直接传入  func(1,2,3),又可以组装成list或者tuple,再通过*args传入func(*(1,2,3));
关键字参数既可以直接传入 func(a=1,b=2),又可以先组装成dict,再通过**kw传入kw(**{‘a’:1,’b’:2})