您的位置:首页 > 编程语言 > Python开发

python的一些学习笔记

2016-12-29 15:40 288 查看
笔记1

#demo.py

from __future__ import division

print 'inpuit you number '
a = raw_input('input you string:')
print("you input the number :",a)

def power(x):
return x*x

def my_abs(x):
if x>0:
return  x
else:
return  -x

def pw(s,n):

while n>1:
n = n-1
s= s*n
print s
print n
return s

def nop():
pass
def enroll(name,grad):
print 'name:',name
print 'grad:',grad

def add_end(l=[]):
l.append('end')
return  l

def add_args(*number):
sum=0
for n  in  number:
sum = sum+n*n

return sum
summ =[1,2,3]

# Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。
#
# 默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
#
# 要注意定义可变参数和关键字参数的语法:
#
# *args是可变参数,args接收的是一个tuple;
#
# **kw是关键字参数,kw接收的是一个dict。
#
# 以及调用函数时如何传入可变参数和关键字参数的语法:
#
# 可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));
#
# 关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。
#
# 使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

def fact(n):
if n==1:
return 1
return  n*fact(n-1)
#但是以上情况,容易出现栈的益处 ,所以需要优化

def fact1(n):
return  fact1_iter(n,1)

def fact1_iter(number,pro):
if number ==1:
return pro
return fact1_iter(number-1,number*pro)

l=[]
m=1
while m<99:
l.append(m)
m =m+2
print  m

#切片功能
k=['3,','4','5']
print k[0:3]     #输出从0开始到3的数值
print k[1:3]      #输出从索引1开始,取出2个元素出来:
print k[-1]       #输出倒数最后一个元素
print k[-2]       #输出倒数第二个元素

#列表生成器
#要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):
range(1,11)
print range(1,11)

#使用内建的isinstance函数可以判断一个变量是不是字符串:
x = 'abc'
y=18
print "isinstance 是不是字符串",isinstance(x,str)
print "isinstance 是不是字符串",isinstance(7,str)

#。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。
# 要创建一个generator,
# 有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

#Python内建了map()和reduce()函数
#map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回

def fun(x):            # fun(x) =x*x
return  x*x

print map(fun,[1,2,3,4,5])

# 还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串
print map(str,[1,2,3,4,5])      #result ['1', '2', '3', '4', '5', '6', '7', '8', '9']

#关键字lambda表示匿名函数,
def build(x, y):
return lambda: x * x + y * y

# 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数

def now():
print  '2016122412:37:19'
# 类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量
#类似_xxx和__xxx这样的函数或变量就是非公开的(private,不应该被直接引用

def _pritvate_1(name):
return  'hello,%s' %name

def _private_2(name):
return  'hi,%s' %name
def greeting(name):
if len(name)>3:
return _pritvate_1(name)
else:
return _private_2(name)

# Python提供了__future__模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性
# Python为了确保你能顺利过渡到新版本,特别提供了__future__模块,让你在旧的版本中试验新版本的一些特性。
# 如果你想在Python 2.7的代码中直接使用Python 3.x的除法,可以通过__future__模块的division实现:
#导入的函数

print '10 / 3 =', 10 / 3


笔记2

# -*- coding: utf-8 -*-

from multiprocessing import Process
from multiprocessing import Pool
import  os
class Student(object):
pass                 #预制空的  ,起到一个占位的作用

# 可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候
#注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,
# 因为self就指向创建的实例本身
# 有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去
class Stu(object):
def __init__(self,name,score):
self.name = name
self.score = score

def print_scroe(std):
print  '%s,%s' %(std.name,std.score)

def get_grade(self):
if self.score>=90:
return  'A'
elif self.score>=70:
return 'B'
else:
return 'C'
# 访问限制
# 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),
# 只有内部可以访问,外部不能访问,所以,我们把Student类改一改:

class Stu1(object):
def __init__(self,name,score):
self.__name = name
self.__score = score

# 对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.__name和实例变量.__score

# 但是如果外部代码要获取name和score怎么办?可以给Student类增加get_name和get_score这样的方法:

class Student(object):

def get_name(self):
return self.__name

def get_score(self):
return self.__score

#在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名。
#
# 有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
#
# 双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,
# 所以,仍然可以通过_Student__name来访问__name变量:

# 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。

class Animal(object):
def run(self):
print 'dog is running '
class Dog(Animal):
def run(self):
print 'dog is running '
class Cat(Animal):
def  run(self):
print  'cat is running'
#对于Dog来说,Animal就是它的父类,对于Animal来说
# 由于Animial实现了run()方法,因此,Dog和Cat作为它的子类,什么事也没干,就自动拥有了run()方法

# dog = Dog()
# dog.run()
#
# cat = Cat()
# cat.run()

# 当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()

# 判断一个变量是否是某个类型可以用isinstance()判断:
#
# >>> isinstance(a, list)
# True
# >>> isinstance(b, Animal)
# True
# >>> isinstance(c, Dog)
# True

# 我们来判断对象类型,使用type()函数
# type(123)
# <type 'int'>

# 我们要判断class的类型,可以使用isinstance()函数。

try:
print 'try  '
except ZeroDivisionError ,e :
print 'except' ,e
finally:
print  'finally'
print 'END'
# 使用Python内置的open()函数,传入文件名和标示符
# try:
#     f= open('C:\Python27\NEWS.txt','r')
#     print f.read()
# finally:
#     if f:
#         f.close()
#在这里是一次性的读入 ,文件小的话还能接受 ,文件大的就有点不能接受了.会卡死的现象
# 但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

# with open('C:\Python27\NEWS.txt', 'r') as f:
#     print f.read()

f= open('C:\Python27\NEWS.txt','r')
for line in f.readlines():
print(line.strip())

#写文件

# 写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件:

# f= open('C:\Python27\NEWS.txt','w')
# f.write('hello this is write file')
# f.close()

with open('C:\Python27\NEWS.txt', 'w') as  f:
f.write('hjsdfsdfsdfsdfsdfsdfssdfsdfsdfsdf')

with open('C:\Python27\NEWS.txt', 'r') as f:
print f.read()

# 在Python中,文件读写是通过open()函数打开的文件对象完成的。使用with语句操作文件IO是个好习惯。

# 操作文件和目录
# 如果我们要操作文件、目录,可以在命令行下面输入操作系统提供的各种命令来完成。比如dir、cp等命令
# Python内置的os模块也可以直接调用操作系统提供的接口函数。
#
# 打开Python交互式命令行,我们来看看如何使用os模块的基本功能:   这里需要导入import os模块 ,在最上边
print  os.name
# os.uname()
print  os.environ
print  os.path.abspath('.')

# 然后创建一个目录:
filetest  ='C:\Python27\mestdir'
if os.path.isdir(filetest):
print   filetest,'is exist and  is a file'
else:
os.mkdir('C:\Python27\mestdir')     #创建一个文件夹
print   filetest,' new   mkdir '
# 删掉一个目录:
os.rmdir('C:\Python27\mestdir')

# print  os.path.splitext('/path/to/file.txt')

#一个路径拆分为两部分,后一部分总是最后级别的目录或文件名
print  os.path.split('/Users/michael/testdir/file.txt')
# os.path.splitext()可以直接让你得到文件扩展名
print  os.path.splitext('/Users/michael/testdir/file.txt')

# 对文件重命名:
# os.rename('/Users/michael/testdir/file.txt', 'test.py')
# 删掉文件:
# os.remove('test.py')

print [x for x in os.listdir('.') if os.path.isdir(x)]

#线程 ,进程
#线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。

# 由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。
#
# multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束:
#导入的模块在顶部

def run_proc(name):
print 'Run child proces %s (%s)' %(name,os.getpid())
print 'Run child process %s (%s)...' % (name, os.getpid())
if __name__ == '__main__':
print 'Parent process  %s' %os.getpid()
p = Process(target=run_proc, args=('test',))
print 'process will start'
p.start()

p.join()
print 'process end '
# 子进程要执行的代码
# def run_proc(name):
#     print 'Run child process %s (%s)...' % (name, os.getpid())
#
# if __name__=='__main__':
#     print 'Parent process %s.' % os.getpid()
#     p = Process(target=run_proc, args=('test',))
#     print 'Process will start.'
#     p.start()
#     p.join()
#     print 'Process end.'
#
# import  time,random
#
# def long_time_task(name):
#     print 'Run task %s (%s)...' % (name, os.getpid())
#     start = time.time()
#     time.sleep(random.random() * 3)
#     end = time.time()
#     print 'Task %s runs %0.2f seconds.' % (name, (end - start))
#
# if __name__=='__main__':
#     print 'Parent process %s.' % os.getpid()
#     p = Pool()
#     for i in range(5):
#         p.apply_async(long_time_task, args=(i,))
#     print 'Waiting for all subprocesses done...'
#     p.close()
#     p.join()
#     print 'All subprocesses done.'

# from time import ctime,sleep
#
# def music():
#     for i in range(2):
#         print "I was listening to music. %s" %ctime()
#         sleep(1)
#
# def move():
#     for i in range(2):
#         print "I was at the movies! %s" %ctime()
#         sleep(5)
#
# if __name__ == '__main__':
#     music()
#     move()
#     print "all over %s" %ctime()

# 多任务可以由多进程完成,也可以由一个进程内的多线程完成。
# Python的标准库提供了两个模块:thread和threading,thread是低级模块,threading是高级模块,
# 对thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。
# 启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:

import threading,time
def loop():
print 'threading %s is running ' %threading.current_thread().name
n=0
while n<6:
n = n+1
print 'thread %s,name>>>%s' %(threading.current_thread().name,n)
time.sleep(1)
print 'thread %s,end' %threading.current_thread().name

print "thread %s is running "%threading.current_thread().name
t= threading.Thread(target=loop,name='loopthread')
t.start()
t.join()
print 'thread %s ended' %threading.currentThread().name

# 分布式进程
# 由于任何进程默认就会启动一个线程,我们把该线程称为主线程,主线程又可以启动新的线程,Python的threading模块有个current_thread()函数,
# 它永远返回当前线程的实例。主线程实例的名字叫MainThread,

# 正则表达式
# Python提供re模块,包含所有正则表达式的功能。由于Python的字符串本身也用\转义

#
# PIL
# PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python