• python入门


    基于python3.8.2版本

    一、语法

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    'a test module'
    
    __author__ = 'authorName'
    
    
    def fn(x):
        return x*x
    
    r = map(fn, [1,2,3,4,5,6])
    
    print(list(r))    
    
    from functools import reduce
    
    def fn2(x, y):
        return x*10 + y
    ss = reduce(fn2, [1,2,3,4,5])
    print(ss)
    
    a = ['adam', 'LISA', 'barT']
    def f1(x):
        return x[0].upper() + x[1:].lower()
    aa = map(f1, a)
    print(list(aa))
    
    def f2(x, y):
        return x * y
    
    ff2 = reduce(f2, [1,2,3])    
    ff3 = reduce(lambda x,y:x*10+y ,[1,2,3])
    print(ff2,':',ff3)
    
    def ff4(x,y):
        return x/10 + y
        
    ff4a=reduce(ff4, [1,2,3])
    print('ff4a:',ff4a)
    
    #字符串转浮点
    def strtofloat(s):
        i = s.find('.')
        digist = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}
        def f1(x,y):
            return x*10+y
        def f2(n):
            return digist[n]
        def f3(x,y):
            return x/10+y
        return reduce(f1, map(f2,s[:i])) + reduce(f3, map(f2, s[:i:-1]))/10
    print('123.456:', strtofloat('123.456'))
    
    
    def f1(x):
        return x%2==0
    xx = filter(f1, [1,2,3,4,5,6])
    print(list(xx))
    
    aa=sorted(['a','AA','sdf'],key=str.lower,reverse=True)
    print(aa)
    
    L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
    def sortByName(x):
        return x[0]
    def sortByCords(x):
        return x[1]
    ll = sorted(L,key=sortByName)
    ss = sorted(L, key=sortByCords, reverse=True)
    print("ll by name:", ll,";ss:",ss)
    
    def fn(*args):
        return args
        
    def addCount():
        n=0
        def add():
            nonlocal n
            n = n + 1
            return n
        return add
    ff=addCount()
    print('ff:',ff(),ff(),ff())
    
    
    def addCount():
        n=[0]
        def add():
            n[0] = n[0] + 1
            return n[0]
        return add
    ff=addCount()
    print('ff:',ff(),ff(),ff())
    
    def addCount():
        global n
        n=0
        def add():
            global n
            n = n + 1
            return n
        return add
    ff=addCount()
    print('ff:',ff(),ff(),ff())
    
    xx = map(lambda x: x*x, [1,2,3])
    print('xx:',list(xx))
            
    f = lambda x:x+x
    print('ff:',f(1))
    
    L = list(filter(lambda n: n%2==1, range(1, 20)))
    print(L)
        
    print(addCount.__name__)
    int('123', base=8)
    
    #装饰器decorator
    def log(func):
        def wrapper(*args, **kw):
            print('log call %s()' %func.__name__)
            return func(*args, **kw)
        return wrapper
        
    @log
    def now():
        print("exec now")
        
    now()
    
    import sys
    if __name__ == "__main__":
        print(sys.argv, __doc__)
        
    class Student(object):
        def __init__(self, name, score):
            self.__name = name
            self.__score = score
        def print_score(self):
            print("%s: %s" %(self.__name, self.__score))
        def get_name(self):
            return self.__name
        def get_score(self):
            return self.__score
        def set_score(self, score):
            self.__score = score
    
    aa = Student('aa',100)
    aa.print_score()
    print('get_name: %s' % aa.get_name())
            
    class Animal(object):
        count = 0
        __slots__=('name','age')
        def __init__(self):
            Animal.count = Animal.count + 1
            print('init Animal')
        def run(self):
            print('animal running...')
    class Dog(Animal):
        def __init__(self):
            print('init Dog')
    animal = Animal()
    animal.run()
    dog = Dog()
    dog.run()
    print(isinstance(dog, Dog))
    print(isinstance(dog, Animal))
    
    dir(dog) #获得一个对象的所有属性和方法
    
    hasattr(dog,'run')
    getattr(dog,'aa','test')
    
    print(Animal.count)
    
    
    class Student(object):
        
        @property  #Python内置的@property装饰器就是负责把一个方法变成属性调用的,把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@birth.setter,负责把一个setter方法变成属性赋值
        def birth(self):
            return self.__birth
        @birth.setter    
        def birth(self,value):
            self.__birth = value
            
        @property
        def age(self):
            return self.__birth -10
            
    a = Student()
    a.birth=100
    
    print('a.birth: %s' %a.birth)
    
    # a.age=100
    print('a.age: %s' %a.age)
    
    class Screen(object):
        def __init__(self, width, height):
            self.__width = width
            self.__height = height
        
        @property
        def width(self):
            return self.__width
            
        @width.setter
        def width(self, width):
            self.__width = width
            
        @property
        def height(self):
            return self.__height
            
        @width.setter
        def height(self, height):
            self.__height = height
            
        @property
        def resolution(self):
            return self.__width * self.__height
            
    screen = Screen(100,200)
    print('%s' %screen.width)
    screen.width=300
    print('%s' %screen.width)
    
    print('resolution:%s' %screen.resolution)
    
    class RunMixin(object):
        def runx(self):
            print(' xxx running...')
    class Test(Animal, RunMixin): #多重继承,多个类存在同一个方法,会取主继承类的方法
        def aa(self):
            print('running...')
    test = Test()
    test.runx()
    
    from enum import Enum, unique
    
    @unique
    class Weekday(Enum):
        Sun = 0
        Mon = 1
        Tue = 2
        Wed = 3
        Thu = 4
        Fri = 5
        Sat = 6
        
    print('Weekday.Sun %s' %Weekday.Sun)
    
    def fn(self, name='world'):
        print('Hello, %s.' %name)
        
    Hello = type('Hello', (object,), dict(hello=fn))     #动态创建一个class对象,type()函数依次传入3个参数:1.class的名称;2.继承的父类集合,注意Python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法;3.class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello上。
    h = Hello()
    h.hello()
    
    import logging
    try:
        print('try...')
        r = 10 / int('a')
        print('result:',r)
    except ValueError as e:
        print('ValueError',e)
        logging.exception(e)
    except ZeroDivisionError as e:
        print('ZeroDivisionError', e)
    finally:
        print('finally')
    print('end')
    
    def foo(s):
        n = int(s)
        if n==0:
            raise ValueError('invalid value:%s' %s) #抛出ValueError
        return 10/n
    def bar():
        try:
            foo(0)
        except ValueError as e:
            print('ValueError')
            raise #raise语句如果不带参数,就会把当前错误原样抛出,继续往上抛,让顶层调用者去处理
            
    bar()

    二、语法

    age = 20
    if age >= 18:
        print("your age is :", age)
        print("adult")
    elif age < 10:
        print('yong')
    else:
        print('other')
        
    arr = ['a', 'b', 'c']
    for i in arr:
        print("arr item:", i)
        
    sum = 0
    for i in range(101):
        sum = sum + i
    print("range item:", sum)
    
    n = 30
    i = 0
    while i < 10:
        i = i + 1
        print("i:",i)
        
    birther = 2000#input("your brith:")
    s = int(birther)
    if s > 2000:
        print('20后')
        print('test')
    else:
        print('other')
        
    def absfn(x):
        if (x > 3):
            return x
        else:
            return x+x
            
    print("absfn:",absfn(3))
    
    from collections import Iterable
    print('iterable:', isinstance('abc', Iterable))
    
    import os 
    dirtest = [d for d in os.listdir('../')]
    print('dirtest:', dirtest)
    
    l = ['AB','BC','EF']
    ll = [s.lower() for s in l]
    print(ll)
    
    L = ['Hello', 'World', 18, 'Apple', None]
    LL = [l.lower() if isinstance(l, str) else l for l in L]
    LLL= [l.lower() for l in L if isinstance(l,str)]
    print('LL:', LL,';LLL:', LLL)

    三、语法

    import re
    test = re.match(r'^(d{2})-(d{3})', '12-345')
    print(test,test.group(0),test.group(1),test.group(2))
    print(test.groups())
    
    
    from datetime import datetime
    print(datetime.now())
    print(datetime.now().strftime('%a, %b %d %H:%M')) #datetime转str
    
    dt = datetime(2020,3,1,12,10)
    print(dt.timestamp()) #单位秒,timestamp是一个浮点数,它没有时区的概念,而datetime是有时区的
    print(datetime.fromtimestamp(dt.timestamp())) #转换为datetime
    
    cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S') #字符串转datetime
    print(cday)

    四、语法

    f = open('./test.py', 'r', encoding='UTF-8')
    x=f.read();
    f.close();
    print(x)
    
    f = open('./test.py', 'a', encoding='UTF-8')
    f.write('#test test test open ')
    f.close();
    
    f = open('./test.py', 'r', encoding='UTF-8', errors='ignore')
    x=f.read()
    f.close()
    print('write:%s' %x)
    
    
    with open('./test.py', 'r', encoding='UTF-8') as f:
        print(f.read())
        
    with open(r'D:xxxpython	est.py', 'r', encoding='UTF-8') as f: #在路径前面加r,即保持字符原始值的意思。
        print(f.read())
        
    from io import StringIO    
    f = StringIO()
    f.write('hello')
    f.write(' ')
    f.write('wrold!')
    
    print(f.getvalue())
    
    import os
    os.environ.get('PATH') #要获取某个环境变量的值
    s = os.path.abspath('.') # 查看当前目录的绝对路径
    testdir = os.path.join(s, 'testdir') #使用join创建新目录路径
    if os.path.exists(testdir) == False: #存在文件或目录
        os.mkdir(testdir) #创建新目录
    
    ll=[x for x in os.listdir('.') if os.path.isdir(x)] #列出当前目录下的所有目录
    print(ll)
    
    import json
    d = dict(name='foo',age=123)
    dstr= json.dumps(d)#json转字符串
    print(dstr) 
    
    dd = json.loads(dstr) #字符串转json
    print(dd)
    
    
    import re
    
    test = '_abc'
    if re.match(r'^d', test):
        print('matched')
    else:
        print('not matched')
        
    print(re.split(r's+', 'a b   c d   e'))
    
    from collections import namedtuple
    Point = namedtuple("Point",['x','y'])
    p = Point(0,1)
    print(p.x, p.y)
    
    import hashlib
    md5=hashlib.md5()
    md5.update('this is md5 test '.encode('UTF-8'))
    md5.update('add'.encode('UTF-8')) #如果数据量很大,可以分块多次调用update(),最后计算的结果和一次调用所有数据是一样的
    print(md5.hexdigest())
    
    def get_md5(s):
        return hashlib.md5(s.encode('UTF-8')).hexdigest()
    print(get_md5('test'), get_md5('this is md5 test add'))
    
    
    import hmac
    message=b'hello'
    key=b'secret'
    h = hmac.new(key, message, digestmod='MD5') #支持MD5和SHA-1
    print(h.hexdigest())
    
    
    from urllib import request, parse
    
    with request.urlopen('https://www.qq.com/') as f:
        data = f.read()
        print('status:',f.status, f.reason)
        for k, v in f.getheaders():
            print('%s: %s' %(k, v))
       # print('data:',data.decode('UTF-8'))
    
    req = request.Request('https://www.qq.com/')
    req.add_header('user-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36') #添加header
    
    with request.urlopen(req) as f:
        data = f.read()
        print('status:',f.status, f.reason)
        for k, v in f.getheaders():
            print('%s: %s' %(k, v))
        print('data:',data.decode('UTF-8'))
        
    
    #postData = parse.urlencode([
    #    ('name', 'test'),
    #    ('age', 20)
    #])    
    #req = request.Request('https://www.qq.com/')
    #req.add_header('Origin', 'https://www.qq.com')
    #with request.urlopen(req, data=postData.encode('UTF-8')) as f:  #post请求,只需要把参数data以bytes形式传入
    #    data = f.read()
    #    print('status:',f.status, f.reason)
    #    for k, v in f.getheaders():
    #        print('%s: %s' %(k, v))
    #    print('data:',data.decode('UTF-8'))
    
    from html.parser import HTMLParser
    
    class MyHTMLParser(HTMLParser):
        def __init__(self):
            super().__init__()
            self.content = ""
        def handle_starttag(self, tag, attrs):
            print('handle_starttag:','<%s>' % tag)
            if tag == 'meta' and ('name', 'description') in attrs:
                print('attrs:',attrs[1][0], attrs[1][1])
                self.content = attrs[1][1]
        def handle_endtag(self, tag):
            print('handle_endtag:','</%s>' % tag)
    
        def handle_startendtag(self, tag, attrs):
            print('handle_startendtag:','<%s/>' % tag)
    
        def handle_data(self, data):
            print('data:',data)
    
        def handle_comment(self, data):
            print('<!--', data, '-->')
    
        def handle_entityref(self, name):
            print('&%s;' % name)
    
        def handle_charref(self, name):
            print('&#%s;' % name)
            
    myHtmlParser = MyHTMLParser()
    myHtmlParser.feed('''<html>
    <head></head>
    <body>
    <!-- test html parser -->
        <p>Some <a href="#">html</a> HTML&nbsp;tutorial...<br>END</p>
    </body></html>''')
    myHtmlParser.feed(data.decode('UTF-8'))
    print('page title is: %s' %myHtmlParser.content)
    
    
    # 导入turtle包的所有内容:
    from turtle import *
    
    # 设置笔刷宽度:
    width(4)
    
    # 前进:
    forward(200)
    # 右转90度:
    right(90)
    
    # 笔刷颜色:
    pencolor('red')
    forward(100)
    right(90)
    
    pencolor('green')
    forward(200)
    right(90)
    
    pencolor('blue')
    forward(100)
    right(90)
    
    # 调用done()使得窗口等待被关闭,否则将立刻关闭窗口:
    done()
    

    参考文档:https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624

  • 相关阅读:
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第三节 梯度下降法 (上)理解篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (下)实操篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (上)理解篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第一节 KNN算法 (下)实操篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第一节 KNN算法 (上)理解篇
    萌新向Python数据分析及数据挖掘 第二章 pandas 第五节 Getting Started with pandas
    Oracle数据库安装和授权
    c# 如何获取JSON文件以及如何获取Config文件(framework 和 net .Core)
    C#Core查询数据库存储EXCEL文件
    如何在WINDOW系统下编译P12证书制作
  • 原文地址:https://www.cnblogs.com/lmh2072005/p/13236583.html
Copyright © 2020-2023  润新知