Python基础

还是先感谢一下廖雪峰老师,廖老师的Git教程真的非常棒,开始学习廖老师的Python教程,一定也是非常棒的。廖雪峰Python教程
python输入输出

//千万记住下面的那个逗号。
print('strings',var)//可以输出多条变量自动加空格分开。
示例:
print('1024*768=',1024*768)

  • #是注释,本文中#号后面一般是运行输出值
  • 以:结束,后面缩进的视为代码块
  • 最好缩进4空格
  • python大小写敏感
  • python 特有None 空
# True False
not 1>2 # 非
True  
9/3
#3.0
10//3 #版地板除
3
  • Unicode 编码通常是2个字节。ASCII编码通常是1个字节。但如果文本大部分是英文就比较浪费空间,所以出现UTF-8编码。
  • UTF-8是将Unicode编码依据实际情况将字符表示成1-6个字节
英文 1字节
汉子通常3字节
  • 计算机内存中一般使用Unicode编码,只有要存到硬盘时才会保存为UTF-8编码。
ord('中') # 输出中的Unicode编码
#'20013' 
chr(20013) #输出Unicode编码对应的字符
'xxx'.encode('ascii/unicode/utf-8') #将xxx以ascii/unicode/utf-8编码方式编码。这样方便存储到硬盘中
'中'.encode('utf-8')
b'\xe4\xb8\xad  #表示已bytes存储
len('ABC') # 求字符串ABC的字符长度
#3  
len(b'ABC') #计算字节数
#3
len('中文'.encode('utf-8')) #原理同上
#6
b'\xe4\xb8\xad'.decode('utf-8') #以utf-8解码字节流
#'中'
#在文件开头加入下面两行,以及设置编辑器编码方式为utf-8 without bom 格式,就是告诉编译器以utf-8编码方式读取文件,就会避免中文乱码。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#格式化输出
'hello, %s' % 'eric'
#'hello,eric'

#格式化输出与C语言基本相同
%x   #十六进制整数

'%2d %02d' % '3,3'
# 3 03    #第一个三前面有空格。

list 列表

# list 是一种有序的集合,元素可以是不同类型的,也可以是一个list
myfriends = ['Wang','Wang','Hu','...']
myfriends
#['Wang','Wang','Hu','...']
len(myfriends)
#4
myfriends[1]
#'Wang'
myfriends[-1] #索引最后一个字符串,以此类推。
#'...'
myfriends.append('zhang')#在最后追加'zhang'
myfriends.insert(i,'name')#在i位置上插入'name'
myfriends.pop()#删除末尾元素
myfriends.pop(i)#删除位置上的元素
myfmaliy =['mom','papa']
myfriends.append(myfmaliy)
myfrends
#['Wang','Wang','Hu','...',['mom','papa']]
len(myfriends)
5
myfmaliy[1]
#'papa'
myfriends[4][1] #mfriends相当于多元数组
#'papa'

tuple 元组

  • 与列表很相似,但初始化后就不能改变,自然就没有append或者insert之类的方法。
  • 优点是代码更安全。
    t =(1,3)//定义并初始化一个元组
# 定义一个元素的元组歧义注意
t=(1) #相当于复制变量t的值为1
#正确定义一个元组如下
t=(1,) # 逗号是重点

条件编译

i = input('输入年龄')
age = int(i) # 因为input 返回值为字符串类型
if age>18:
    print('you are chengren')
else:
    print('weichengnian')

循环

for name in myfriends:
    print(name) #打印出myfriends 里面的所有元素
range(x) #生成0-x的整数
sum =0
n =100
while n>0:
    sum +=n
print(sum)

# 5050

dict 字典

d= {'A':65,'B':66,'C':67}
d['C']
# 67

'D' in d # 判断D在不在字典d中
# False

d.get('D') #判断D在不在字典d中,不在返回None
# None
d.get('D','buzai') #判断D在不在字典d中,返回自定义值

set

  • 与dict 类似
# set 元素不重复,无value。要list作为输入集合
s = set ([1,3,2,2])
s
#{1,3,2}
s.add(4)
s.remove(4)
s2 =set {[2,1,5]}
s&s1
#{1,2}
s|s1
# {3,5}

函数

python 内置函数

abs(-12)
#12
  • 创建了.py文件,里面定义了一个函数如下,在控制台使用from <fileName> import <functionName>来导入函数,不带扩展名。
  • 位置参数
def my_abs(x):
    if x>0:
        return xrange
    else:
        return -x 
# 创建一个空函数,必须使用pass,否则会报错
#返回多个值
def kill(x):
    return x-2 ,2
x,y =kill(7)
# 函数的默认参数
def power(x,n=2):
    s=1
    while n>0:
        n=n-1
        x *=x
    return x
# 问题注意,下面两种函数多次无参数调用后输出结果不同,因为函数在定义的时候也定义了默认参数,除非自行定义为None。如下:

def add_str(L=[]):
    L.append('str')
    return L
# 三次调用后 ['str','str','str']

def add_str(L=None):
    if L is None:
        L=[]
    L.append('str')
    return L
  • 可变参数
# 在变量前增加*,表示把list或者tuple的元素变成可变参数传进去
def cacl(num):
    sum = 0
    for n in num: 
        sum += n
    return sum
cacl([1,2])
#3
cacl(1,2)
# error

def cacl(*num):
    sum = 0
    for n in num: 
        sum += n
    return sum
cacl(1,2)
#3
  • 关键字参数
def dog(name,age,**qt): # **是关键字的意思,按照Key-Value的格式输入,会自动组装一个dict,
    print(name,age,qt)

dog('heibao','4',host='eric')
# heibao 4 {'host': 'eric'}
# 命名关键字参数
def dog(name,age,*,home,host):
    print(name,age,home,host)
#只有将命名关键字输入正确才不会报错。
# 组合参数必须按顺序来
# 必选参数、默认参数 、可变参数、命名关键字参数、关键字参数
def f(a,b,C=0,*var ,**qt):
    print (a,b,C,var,qt )
def f(a,b,C=0,*,var ,**qt):
    print (a,b,C,var,qt )
  • 递归函数
# 自己调用自己就是递归函数
def j (x):
    if x == 1:
        return 1
    return x * j(x-1)

高级特性

切片

n=0
p=[]
while  n<99:
    p.append(n)
    n+=1
# 创建一个列表
p[0:1] or p[:1]
#0  从0位切到1位
p[2:5]
#2,3,4  从第2位切换到5位
p[:10:2]
#0,2,4,6,8 前十位每隔两位取一
p[::10]
#0,10,20,...90  每隔十位取一
p[-2:]
#98,99  切倒数两个
#元组是不能变的列表,所以也能切片
(0,1,2,3)[:2]
#0,1

# 字符串操作也是切片
'asdf'[:3]
#'asd'

迭代

#其实就是遍历,只不过换了个叫法

# dict迭代
# 迭代key
d= {'zero':0,'one':1,'two':2}
for key in d:
    print(key)

# 'zero','one',,'two'

# 迭代value
for v in d.values():
    print(v)
#0
#1
#2

#迭代key and value
for k,v in d.items():
    print()
 #zero 0
 #one 1
 #two 2

列表生成式

# 好强大,好有趣的功能
>>> [x+y  for x in 'abc' for y in 'def']
['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf']
>>> [x*y for x in range(1,10) for y in range(1,10) if x%2 == 0 ]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 4, 8, 12, 16, 20, 24, 28, 32, 36, 6, 12, 18, 24
, 30, 36, 42, 48, 54, 8, 16, 24, 32, 40, 48, 56, 64, 72]
>>> [x*y for x in range(1,10) for y in range(1,10) if x%2 == 0 if y%2==0 ]
[4, 8, 12, 16, 8, 16, 24, 32, 12, 24, 36, 48, 16, 32, 48, 64]
>>> d
{'zero': 0, 'one': 1, 'two': 2}
>>> [k +'='+ str(v) for k,v in d.items()]
['zero=0', 'one=1', 'two=2']

>>> [key.upper() for key in d]
['ZERO', 'ONE', 'TWO']

生成器

  • 列表创建会浪费很多内存,生成器是保存列表的生成算法,用到时再计算出节省内存。
  • 第一种创建方法:只要将列表的[]变成()即表示生成的是生成器。
>>> g =(x*x for x in range(10))
>>> for n in g: #不使用迭代不能全部显示。
...     print(n)
...
0
1
4
9
16
25
36
49
64
81
  • 第二种创建方法:定义一个函数中包含yield,下面的是将print(b) 变为yield b
# 菲波那切数列
def fib (x):
    n,a,b = 0,0,1
    while(n<x):
        yield b   #变成这样就是生成器
        a,b = b ,a+b
        n = n+1
    return 'over'
posted @ 2017-10-30 22:41  icanactnow  阅读(519)  评论(0编辑  收藏  举报