Ejemplo n.º 1
0
        print('{} 考了{}分'.format(self.name, self.score))
        return '{} 考了{}分'.format(self.name, self.score)

    def get_score_level(self):
        if self.score > 90:
            return "A"
        elif self.score > 80:
            return "B"
        else:
            return "继续努力"


tom = Student('tom', 18, 90)
lucy = Student('lucy', 18, 90)
tom.weight = '66.5kg'
pu.print_line_separator("类的实例->打印Student对象实例")
print(Student)
print(tom)
# print(lucy.weight)  # 我们只给tom实例赋了weight属性 所以打印lucy.weight 会 "AttributeError: 'Student' object has no attribute 'weight'"
print("name: {} ,age:{} ,score:{}分 ,体重:{}".format(tom.name, tom.age, tom.score,
                                                  tom.weight))
print("{} ,属于:{}".format(tom.team_score(), tom.get_score_level()))

pu.print_line_separator("访问限制->属性的名称前加上两个下划线")


class Student2(object):
    def __init__(self, name, address, gender):
        self.name = name
        self.__address = address
        self.__gender = gender
Ejemplo n.º 2
0
import util.PrintUtil as pu
l1 = ["wangwu", "lisi", "zhangsan", "zhaoliu"]
l2 = [89, 90, 77]
z = zip(l1, l2)
print("list(z): {}".format(list(z)))
pu.print_line_separator()
'''
    和Python2的区别(一):返回的是一个迭代器,而不是一个list本身
    上面已经打印了一次了 所以下面再遍历的话就是[]  因为迭代器只能遍历一次
'''
print("type(z):{} ".format(type(z)))

for i in z:
    print(id(i))
    print(i, sep=" ")
pu.print_line_separator()

l3 = [i for i in list(z)]
print("type(l3):{} len(l3):{}".format(type(l3), len(l3)))
print(l3)

# print(help(zip))
Ejemplo n.º 3
0

hello_world()

a = ["1", "2", "3"]
b = ["a", "b", "c"]
m = (m + n for m in a for n in b)
n = [m + n for m in a for n in b]
print("a: {}".format(a))
print("id(a): {}".format(id(a)))
print("b: {}".format(b))
print("m: {}".format(m))
print("id(m) : {}, type(m):{}".format(id(m), type(m)))
print("id(n) : {}, type(n):{}".format(id(n), type(n)))

pu.print_line_separator()

#一只敏捷的棕色狐狸跳到了一只懒狗身上。该句据说是包含所有26个字母的最短的句子。
print('The quick brown fox', 'jumps over', 'the lazy dog')

print('100 + 200 =', 100 + 200)

#name = input("请输入你的名称: ")
#print("欢迎: ",name)

pu.print_line_separator("print中可以使用'''来打印多行")
print('''
hha
hhe
heih
xix
Ejemplo n.º 4
0
'''
python文件操作: 文件读写 /StringIO/BytesIO / 操作文件和目录 / 序列化
'''
import util.PrintUtil as pu
from io import StringIO
from io import BytesIO
import os
import json
'''
很多时候,数据读写不一定是文件,也可以在内存中读写。

StringIO顾名思义就是在内存中读写str。

要把str写入StringIO,我们需要先创建一个StringIO,然后,像文件一样写入即可:
'''
pu.print_line_separator("StringIO使用")
f = StringIO()
f.writelines('''
hello
python
io
''')
s = f.getvalue()
print(s)

pu.print_line_separator("使用StringIO读取")
f = StringIO('我是StringIO字符串\nbyebye')
while True:
    s = f.readline()
    if s == '':
        break
Ejemplo n.º 5
0
        def __str__(self):
            return 'Student object (name=%s)' % self.name
        __repr__ = __str__
    '''

    def __str__(self):
        return 'Student name is :{} '.format(self.name)

    def __repr__(self):
        return 'Student name is :{} '.format(self.name)

    def __call__(self, *args, **kwargs):
        print('my name is %' % self.name)


pu.print_line_separator('通过@property来访问属性,并可以设置属性校验')
s = Student("Tom")
s.score = 99
print(s.score)
# s.score = 110  # 超过限制的话 就会rasie异常
print(s)

pu.print_line_separator('通过callable函数判断一个对象是否可调用')
print(callable(
    Student('Jerry')))  # 此时返回的是 False  但Student类中定义 __call__方法后 打印即是Ture
print(callable(max))

pu.print_line_separator('利用完全动态的__getattr__,我们可以写出一个链式调用')


class Chain(object):
sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。


'''

from functools import reduce
import util.PrintUtil as pu
import time, functools


def add(x, y, f):
    return f(x) + f(y)


pu.print_line_separator("高阶函数add调用")

result = add(-1, 4, abs)
print("高阶函数add调用结果: {}".format(result))

pu.print_line_separator("高阶函数求两个list中最大\最小值的和")


def listPlus(list1, list2, plus1, plus2):
    return plus1(list1) + plus2(list2)


list1 = [1, 4, 5]
list2 = [100, 200, 500]
listMaxPlus = listPlus(list1, list2, max, min)
print("求两个list最大元素之和: {}".format(listMaxPlus))
Ejemplo n.º 7
0
    print('thread %s is running...' % threading.current_thread().name)
    n = 0
    while n < 5:
        n = n + 1
        print('thread %s >>> %s' % (threading.current_thread().name, n))
        # time.sleep(1)
    print('thread %s ended.' % 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.current_thread().name)

pu.print_line_separator('多线程共享变量')

# 假定这是你的银行存款:
balance = 0


def change_it(n):
    # 先存后取,结果应该为0:
    global balance
    balance = balance + n
    balance = balance - n


lock = threading.Lock()

Ejemplo n.º 8
0
def calc(exp):
    ss = exp.split('+')
    ns = map(str2num, ss)
    return reduce(lambda acc, x: acc + x, ns)


def main():
    r = calc('100 + 200 + 345')
    print('100 + 200 + 345 =', r)
    r = calc('99 + 88 + 7.6')
    print('99 + 88 + 7.6 =', r)


main()

pu.print_line_separator("以下用于单元测试")


class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def get_grade(self):
        if self.score < 0:
            raise ValueError('分值不能小于0')
        if self.score > 100:
            raise ValueError('分值不能高于100')

        if self.score >= 60 and self.score < 80:
            return 'B'
Ejemplo n.º 9
0
    def sayHello(self):
        self.name = "hu"
        self.address = "华星现代产业园"
        print("hello {} , age : {} ,address:{}".format(self.name, self.age,
                                                       self.address))
        print("访问类的成员属性(非实例的)使用__class__.address : {}".format(
            __class__.address))


class Student2(Student):
    name = None
    age = 1
    # pass


s = Student()
print("s.name = %s,s.age = %s" % (s.name, s.age))
#print("s.nickname = ".format(s.__nickname))
s.sayHello()

pu.print_line_separator("访问私有属性")

# 其实python的私有不是真正意义上的私有 只是使用了 name mangling技术 如果真要访问的话 可以使用下面方法
print(Student.__dict__)
print("访问私有属性 nickname: {0}".format(s._Student__nickname))
pu.print_line_separator()

# 可以直接把Student2当作参数传递, Python是弱语言 若sayHello中有用到Student2中不存在的属性 会报错
Student.sayHello(Student2)
Ejemplo n.º 10
0
如果有必要,可以先对参数的数据类型做检查;

函数体内部可以用return随时返回函数结果;

函数执行完毕也没有return语句时,自动return None。

函数可以同时返回多个值,但其实就是一个tuple。
'''

# 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
alias_abs = abs
print(alias_abs(-1))

print(hex(12))  # 0xc 十六进制0x开头

pu.print_line_separator("定义函数")


def my_abs(x):
    # 不加这个判断的话 TypeError: '>' not supported between instances of 'str' and 'int' 会是这个错误
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type ')
    if x > 0:
        return x
    else:
        return -x


print(my_abs(1))
print(my_abs(-11))
# print(my_abs('x'))
Ejemplo n.º 11
0
import re
import util.PrintUtil as pu

p = re.compile(r'\d+')
str = '1afb123fdkfwlernlrn9258523'
# re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
m = p.match(str)
print(m)
print(m.group(0), m.start(0), m.end(0))
print(m.groups())
print(p.search(str))
print(p.findall(str))
mm = p.match(str, 4, 6)
print(mm)

pu.print_line_separator("正则表达式 sub")

pp = re.compile(r'(\w+) (\w+)')
s = 'hello 123 wol 234,I love pp'
rst = pp.sub(r'Hello RE', s)
print(rst)

pu.print_line_separator('正则表达式匹配中文 [u4e00-u9fa5]')
title = u'世界 你好,Hello World'
p = re.compile(r'[\u4e00-\u9fa5]+')
print(p.findall(title))

pu.print_line_separator('匹配模式【默认是贪婪/使用?表示非贪婪】')
htm = '<div>wo shi div</div><div>123</div>'
p1 = re.compile(r'<div>.*</div>')
p2 = re.compile(r'<div>.*?</div>')