python学习笔记01-python基础学习

1. 输入和输出

#!/usr/bin/env python
name = raw_input('please enter your name:')
print 'hello,',name

2. 数据类型和变量

十进制:100
十六进制:0xff00
浮点数:3.14
科学计数:1.23e9
字符串:'abc' "xyz"
多行字符串:
            '''line1
            ... line2
            ... line3'''
布尔值:True False
逻辑运算符:and or not
空值:None

3. 字符串和编码

Unicode把所有语言都统一到一套编码里。
在内存里统一使用Unicode编码。
在传输和存储时,使用可变长编码UTF-8,从而节省空间和网络带宽。 

4. Python对Unicode的支持

1. 最早的Python只支持ASCII编码。普通字符串'ABC'在Python内部都是ASCII编码的。Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换。

>> ord('A')
65
>> chr(65)
'A'

2. Python后来添加了对Unicode的支持,以Unicode表示字符串用u'...'表示。

注意,u'中'和u'\u4e2d'是一样的。\u后面是十六进制的Unicode码。

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

3. Unicode编码转UTF-8编码

>> u'ABC'.encode('utf-8')
'ABC'
>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
>> 

使用len()可以返回字符串的长度

>> len(u'ABC')
3
>> len('ABC')
3
>> len(u'中文')
2
>> len('\xe4\xb8\xad\xe6\x96\x87')
6
>> 

4. UTF-8编码转换为Unicode编码

>> 'abc'.decode('utf-8')
u'abc'
>> '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
u'\u4e2d\u6587'
>> print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
中文
>> 

5. 关于python的源文件保存

在保存源代码时,以UTF-8保存。
必须在源文件的头部声明UTF-8编码。 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

6. 格式化

注意,百分号使用两个百分号来表示 

>> 'Hello, %s' % 'zhangsan'
'Hello, zhangsan'
>> 'Hi, %s , you have $%d.' % ('Michael',1000)
'Hi, Michael , you have $1000.'
>> 

4. list有序列表

#创建一个list
>> classmates = ['Michael','Bob','Tracy']
>> classmates
['Michael', 'Bob', 'Tracy']
#获取list元素个数
>> len(classmates)
3
#获取list里面第一个元素
>> classmates[0]
'Michael'
#获取list里面最后一个元素
>> classmates[-1]
'Tracy'
#追回一个元素到list的最后
>> classmates.append('Adam')
>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
#插入一个元素到list的某个位置
>> classmates.insert(1,'Jack')
>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
#弹出list的最后一个元素
>> classmates.pop()
'Adam'
>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
#弹出list的第二个元素
>> classmates.pop(1)
'Jack'
>> classmates
['Michael', 'Bob', 'Tracy']
>> classmates[1] = 'Sarah'
>> classmates
['Michael', 'Sarah', 'Tracy']
>> L = ['Apple',123,True]
#将列表L添加到list中
>> classmates.append(L)
>> classmates
['Michael', 'Sarah', 'Tracy', ['Apple', 123, True]]
#取出二维列表中的某个元素
>> classmates[-1][0]
'Apple'
>> 

5. tuple有序列表——元组(与list的区别是:tuple不可变)

和list完全一样,只是一旦定义,则不可变。
特别注意,定义只有一个元素的tuple时,必须加一个逗号(否则成了数据运算中的小括号)。 

>> t = (1,)
>> t
(1,)
>> 

6. 条件判断

#!/usr/bin/env python
age = raw_input('please enter your age:\n')
age = int(age)
if age >= 18:
        print 'adult'
elif age >= 6:
        print 'teenager'
else:
        print 'kid'

简写
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。 

if x:
    print 'True'

7. 循环

1. for...in循环,依次把list或者tuple中的每个元素迭代出来

#!/usr/bin/env python
names = [ 'Michael','Bob','Tracy']
for name in names:
        print name

2. range函数,生成整数序列

>> range(5)
[0, 1, 2, 3, 4]
#!/usr/bin/env python
sum = 0
for x in range(5):
        sum = sum + x
print sum

3. while循环

#!/usr/bin/env python
sum = 0
n = 10
while n > 0:
        sum = sum + n
        n = n - 2
print sum

4. 再议raw_input

将raw_input输入的字符串转为ini类型 

#!/usr/bin/env python
birth = int(raw_input('birth:\n'))
birth

8. dict字典

#定义一个dict
>> d = {'Michael':95,'Bob':75,'Tracy':85}
#获取dict中的键值对
>> d['Michael']
95
#添加键值对到dict中
>> d['Adam'] = 67
>> d
{'Bob': 75, 'Michael': 95, 'Tracy': 85, 'Adam': 67}
#判断某个键名是否在dict中存在
>> 'Thomas' in d
False
#获取dict中的某个键名的值,如果键名不存在,返回None
>> d.get('Thomas')
#获取dict中的某个键名的值,如果键名不存在,返回自定义的默认值
>> d.get('Thomas',-1)
-1
#根据键名,删除dict中的某个键值对
>> d.pop('Bob')
75
>> d
{'Michael': 95, 'Tracy': 85, 'Adam': 67}
>> 

9. set集合

创建set,需要提供一个list作为输入集合
set会自动过滤重复元素
两个set可以做数学意义上的交集、并集等操作 

>> s1 = set([1,2])
>> s1.add(3)
>> s1
set([1, 2, 3])
>> s1.add(4)
>> s1
set([1, 2, 3, 4])
>> s1.remove(4)
>> s1
set([1, 2, 3])
>> s2 = set([2,3,4])
>> s2
set([2, 3, 4])
>> s1 & s2
set([2, 3])
>> s1 | s2
set([1, 2, 3, 4])
>> 

10. 函数调用

>> help(abs)
Help on built-in function abs in module __builtin__:
abs(...)
    abs(number) -> number
    Return the absolute value of the argument.
>> abs(-20)
20
>> cmp(1,2)
-1
>> A = abs
>> A(-1)
1
>> 

11. 数据类型转换

>> int('123')
123
>> int(12.24)
12
>> float('12.34')
12.34
>> str(1.23)
'1.23'
>> unicode(100)
u'100'
>> bool(1)
True
>> bool('')
False
>> bool(0)
False

12. 函数定义

注意,return None可以简写为return 

#!/usr/bin/env python
def my_abs(x):
        if x >= 0:
                return x
        else:
                return -x
print my_abs(-100)

空函数
注意,pass为占位符 

#!/usr/bin/env python
def nop():
        pass
nop()

参数检查isinstance 

#!/usr/bin/env python
def my_abs(x):
        if not isinstance(x,(int,float)):
                raise TypeError('bad operand type')
        if x >= 0:
                return x
        else:
                return -x
print my_abs(-8)

返回多个值
返回多个值的本质其实是返回一个tuple
在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值。
所有Python的函数返回多值其实就是返回一个tuple 

#!/usr/bin/env python
def move(x,y):
        nx = x + 10
        ny = y + 20
        return nx,ny
x,y = move(100,200)
print x,y

13. 函数的参数

1. 默认的参数

#!/usr/bin/env python
def power(x,n=2):
        s = 1
        while n > 0:
                n = n - 1
                s = s * x
        return s
print power(5)
print power(3,3)

注意,默认参数必须指向不变对象。如None、字符串、数字。
下面是一个坑 

#!/usr/bin/env python
def add_end(L=[]):
        L.append('END')
        return L
print add_end()
print add_end()

正确的写法是: 

#!/usr/bin/env python
def add_end(L=None):
        if L is None:
                L = []
        L.append('END')
        return L
print add_end()
print add_end()

2. 可变参数

#!/usr/bin/env python
def calc(*numbers):
        sum = 0
        for n in numbers:
                sum = sum + n
        return sum
print calc()
print calc(1,2,3)
nums = [1,2,3]
print calc(*nums)

3. 关键字参数

#!/usr/bin/env python
#定义关键字参数函数
def person(name,age,**kw):
        print 'name:',name,'age',age,'other',kw
#调用关键字参数
person('Michael',30)
person('Bob',35,city='Beijin')
person('Adam',45,gender='M',job='Enginner')
d = { 'city':'Beijin','job':'Enginner' }
person('Jack',24,**d)

4.参数组合

各种类型的参数可以一起使用,但是参数定义的顺序必须是:
必先参数-默认参数-可变参数-关键字参数 

#!/usr/bin/env python
def func(a,b,c=0,*args,**kw):
        print 'a =',a,'b =',b,'c =',c,'args =',args,'kw =',kw
func(1,2)
func(1,2,c=3)
func(1,2,3,'a','b')
func(1,2,3,'a','b',x=99)
args = (1,2,3,4)
kw = {'x':99 }
func(*args,**kw)

14. 递归函数

注意,递归可能导致栈溢出
如果编译语言对尾递归进行了优化,无论怎么调用都不会栈溢出
遗憾的是,大多数编程语言没有针对尾递归做优化,Python解释器也没有对尾递归做优化 

#!/usr/bin/env python
#递归
def sum(n):
        if n==1:
                return 1
        return n + sum(n-1)
print sum(3)
#尾递归
def func(n):
        return func_iter(n,1)
def func_iter(num,product):
        if num == 1:
                return product
        return func_iter(num - 1,num + product)
print func(3)

猜你喜欢

转载自blog.csdn.net/ybf326/article/details/83216328