zoukankan      html  css  js  c++  java
  • Python范例总结

    一、基础功能

      1、操作符

    • and 拥有更高优先级,会先行运算。
    • 优先级顺序为 NOT、AND、OR。

      2、列表

        1)列表拼接
    l1 = [1,2,3]
    l2 = [4,5,6]
    
    # 方法1
    # l1 = l1 + l2
    
    # 方法2
    # l1[len(l1):len(l1)] = l2
    
    # 方法3
    l1.extend(l2)
    print(l1)

       3、函数

        1)范例1
    def greetPerson(*name):
        print('Hello', name)
      
    greetPerson('Runoob', 'Google')
    
    ##结果为Hello ('Runoob', 'Google')
        2)范例2

      加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

    x = True
    def printLine(text):
        print(text, ' Runoob')
    printLine('Python')
    
    ##Python  Runoob
        3)范例3
    def Foo(x):
        if (x==1):
            return 1
        else:
            return x+Foo(x-1)
    
    #n+n-1+1
    print(Foo(100)) 
    
    ##结果是5050

       4、类

        1)私有字段/方法

      在Python中,属性和方法的访问权限只有两种:公开的和私有的。如果希望是私有的,在命名时可以用两个下划线作为开头。

      Python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有属性和方法换了一个名字来“妨碍”对它们的访问,事实上如果你知道更换名字的规则仍然可以访问到它们。

      不建议将属性设置为私有的,因为这会导致子类无法访问。所以大多数Python程序员会遵循一种命名惯例就是让属性名以单下划线开头来表示属性是受保护的,本类之外的代码在访问这样的属性时应该要保持慎重。这种做法并不是语法上的规则,单下划线开头的属性和方法外界仍然是可以访问的,所以更多的时候它是一种暗示或隐喻

    class JustCounter:
        __secretCount = 0  # 私有属性,前缀两个下划线
        publicCount = 0
    
        def count(self):
            self.__secretCount += 1  # 类内部调用私有属性
            self.publicCount += 1
            print(self.__secretCount)
    
        def __print1(self):  # 私有方法,前缀两个下划线
            print('This is a private method!')
    
        def print2(self):
            self.__print1()  # 类内部调用私有方法
    
    counter = JustCounter()
    
    print(counter.publicCount)
    
    # print counter.__secretCount  # 报错,实例不能访问私有属性
    print(counter._JustCounter__secretCount) # 可以通过( 对象名._类名__私有属性名 )访问私有属性
    counter.count()
    # counter.__print1()  # 报错,实例不能访问私有方法
    counter._JustCounter__print1()  # 可以通过( 对象名._类名__私有方法名 )访问私有方法
    counter.print2()

    二、进阶功能

      1、函数

        1)偏函数
    import functools
    def func(a1,a2):
        print(a1,a2)
    
    
    new_func = functools.partial(func, 666) ##666 传给第一个参数
    new_func(999)

    ##结果
    666 999
        2)__开头的函数有很多

      当把面向对象中的所有__函数__实现时,对象做任何操作时,都会执行其中对应的方法

      举例1__add__

    
    
    class Foo(object):
    def __init__(self, num):
    self.num = num

    def __add__(self, other):
    data = self.num + other.num
    return Foo(data)


    obj1 = Foo(1)
    obj2 = Foo(2)

    v = obj1.num + obj2.num

    print(v)

    ## 结果是3
        3)链chain

      将每个列表的函数(功能)拼接到一个大的列表中,依次执行

    from itertools import chain
    
    def f1(x):
        return x + 1
    
    func1_list = [f1,lambda x:x-1]
    
    def f2(x):
        return x + 10
    
    new_fun_list = chain([f2], func1_list)
    for func in new_fun_list:
        print(func)

      列表也可以直接使用chain

    from itertools import chain
    
    
    l1 = [11,22,33]
    l2 = [44,55,66]
    
    
    new_list = chain(l1,l2)
    for item in new_list:
        print(item)
         4)python命令行传参
      使用sys.argv传参

      sys模块是很常用的模块, 它封装了与python解释器相关的数据,例如sys.modules里面有已经加载了的所有模块信息,sys.path里面是PYTHONPATH的内容,而sys.argv则封装了传入的参数数据。

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import sys
    gpus = sys.argv[1]
    #gpus = [int(gpus.split(','))]
    batch_size = sys.argv[2]
    print(gpus, type(gpus))
    print(batch_size, type(batch_size))

      执行python argv_test.py 1,0,2 10

      使用argparse传参
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import argparse
    parser = argparse.ArgumentParser(description='manual to this script')
    parser.add_argument('--gpus', type=str, default = None)
    parser.add_argument('--batch-size', type=int, default=32)
    args = parser.parse_args()
    print(args.gpus, type(args.gpus))
    print(args.batch_size, type(args.batch_size))

     执行:python argv_test.py --gpus=0,1,2 --batch-size=20

      2、类

        1)继承字典
    class MyDict(dict):
        def __init__(self, *args, **kwargs):
            super(MyDict,self).__init__(*args, **kwargs)
            self['modify'] = True
            
    
    obj = MyDict()
    print(obj)
    继承字典
        2)打开/关闭实现:with方法
    class SQLHelper(object):
        def open(self):
            pass
    
        def fetch(self, sql):
            pass
    
        def close(self):
            pass
    ### 方法1
    # obj = SQLHelper()
    # obj.open()
    # obj.fetch('selcet * from table1')
    # obj.close()
    
    
    ### 方法二
    with SQLHelper() as obj: #自动调用类中的__enter__方法,obj就是__enter__返回值
        obj.fetch('selcet * from table1')
        # 当执行完毕后,自动调用类__exit__方法

      3、web框架的本质

      https://www.cnblogs.com/wupeiqi/articles/5237672.html

        1)werkzeug
    from werkzeug.wrappers import Request, Response

    @Request.application
    def hello(request):
    return Response('Hello World!')

    if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('127.0.0.1', 40000, hello)
     
        2)wsgi

      WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。

      python标准库提供的独立WSGI服务器称为wsgiref。

    from wsgiref.simple_server import make_server
     
     
    def RunServer(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/html')])
        return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]
     
     
    if __name__ == '__main__':
        httpd = make_server('', 8000, RunServer)
        print("Serving HTTP on port 8000...")
        httpd.serve_forever()
  • 相关阅读:
    喵哈哈村的魔法考试 Round #1 (Div.2) 题解
    Codeforces Round #398 (Div. 2) A. Snacktower 模拟
    Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) F. Souvenirs 线段树套set
    视频人脸检测——Dlib版(六)
    pip/pip3更换国内源
    OpenCV添加中文(五)
    图片人脸检测——Dlib版(四)
    视频人脸检测——OpenCV版(三)
    Tesseract Ocr文字识别
    图片人脸检测——OpenCV版(二)
  • 原文地址:https://www.cnblogs.com/happy-king/p/13542868.html
Copyright © 2011-2022 走看看