day19プロセス指向プログラミング、関数やモジュール匿名

1.二分法

1.1アルゴリズムとは何ですか

アルゴリズムは、問題への効率的なソリューションです。

1.2二分法

# 需求:有一个按照从小到大顺序排列的数字列表
#      需要从该数字列表中找到我们想要的那个一个数字
#      如何做更高效???
nums=[-3,4,7,10,13,21,43,77,89]
find_num=10

nums=[-3,4,13,10,-2,7,89]
nums.sort()
print(nums)

# 方案一:整体遍历效率太低
for num in nums:
    if num == find_num:
        print('find it')
        break
# 方案二:二分法
nums=[-3,4,7,10,13,21,43,77,89]
find_num=8
def binary_search(find_num,l):
    print(l)
    if len(l) == 0:
        print('找的值不存在')
        return
    mid_index=len(l) // 2

    if find_num > l[mid_index]:
        # 接下来的查找应该是在列表的右半部分
        l=l[mid_index+1:]
        binary_search(find_num,l)
    elif find_num < l[mid_index]:
        # 接下来的查找应该是在列表的左半部分
        l=l[:mid_index]
        binary_search(find_num,l)
    else:
        print('find it')

binary_search(find_num,nums)

2.プロセス指向プログラミング

2.1プログラミングのアイデア/パラダイム

アイデアをプログラミングするアイデア自体無ランキングポイントではなく、ユーザー自身のプログラミング、プログラミングルーチンを指し、

プロセス指向プログラミングのアイデア2.2

  • 何を最初に、次に何を、何の後:コアは、「プロセス」、プロセスフローである単語、物事の手順を参照しています
  • 組立ラインのデザインにアイデアのようにプログラミングに基づいて、

2.3の長所と短所

利点:

複雑な流れの問題、そして簡素化

短所:

拡張性は非常に悪く、

解決シナリオに2.4プロセス指向プログラミングのアイデア

  • いないすべてのソフトウェアは、頻繁に変更が必要です。たとえば、スクリプトを書きます
  • でも、ソフトウェアは、頻繁な変更を必要とし、また変更のすべてのソフトウェアコンポーネントが一緒に必要とされていることを意味するものではありません

3.無名関数

3.1定義無名関数

  • DEFという名前の関数を定義します

    func=函数的内存地址
    def func(x,y):
        return x+y
    
  • 匿名関数を定義するためのlamdab

    print(lambda x,y:x+y)
    

3.2匿名コール機能

あまり一般的な方法:()

res=(lambda x,y:x+y)(1,2)
print(res)

第二の方法:()を使用することができますが、意味がありません。

func=lambda x,y:x+y
res=func(1,2)
print(res)

匿名は、一時的なシーンのために呼び出します。より多くの匿名は他の機能と組み合わせて使用​​されています

アプリケーション3.3無名関数

法の適用3.3.1最大

salaries={
    'siry':3000,
    'tom':7000,
    'lili':10000,
    'jack':2000
}
# 需求1:找出薪资最高的那个人=》lili
res=max([3,200,11,300,399])
print(res)

res=max(salaries)
print(res)#比较的是key的值
#为此我们可以定义一个函数,来表示值
def func(k):
    return salaries[k]
res=max(salaries,key=func) # 返回值=func('siry')
print(res)
#lambda k:salaries[k],以这个标准来执行
res=max(salaries,key=lambda k:salaries[k])
print(res)

3.3.2分の方法の応用

# ========================min的应用
res=min(salaries,key=lambda k:salaries[k])
print(res)

アプリケーション3.3.3ソート方法

res=sorted(salaries,key=lambda k:salaries[k],reverse=True)
print(res)

3.3.4アプリケーションマップ方式(理解)

l=['alex','lxx','wxx','薛贤妻']
new_l=(name+'_dsb' for name in l)
print(new_l)

res=map(lambda name:name+'_dsb',l)
print(res) # 生成器

アプリケーション3.3.5フィルタ法(理解)

l=['alex_sb','lxx_sb','wxx']
res=(name for name in l if name.endswith('sb'))
print(res)

res=filter(lambda name:name.endswith('sb'),l)
print(res)

3.3.6適用方法(理解)を低減

from functools import reduce
res=reduce(lambda x,y:x+y,[1,2,3],10) # 16
print(res)

res=reduce(lambda x,y:x+y,['a','b','c']) # 'a','b'
print(res)

4.モジュール

4.1モジュールとは何ですか

モジュールは、次の3つのカテゴリに分けられ、一連の機能の集合体であります

  • I:ビルトインモジュール
  • II:サードパーティ製のモジュール
  • III:カスタムモジュール

Pythonのファイル自体はモジュール、ファイル名m.pyであり、mと呼ばれるモジュール

ps:模块有四种形式
   1 使用python编写的.py文件
   2 已被编译为共享库或DLL的C或C++扩展        
   3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)       
   4 使用C编写并链接到python解释器的内置模块

4.2なぜあなたはモジュールを使用します

  • 構築され、第3のモジュールは、このISMを定義する必要によってもたらさ、大きく、開発効率を向上させることができます
  • カスタムモジュール
    誰もが共有するために、プログラムの各部分の機能はモジュールに抽出することができ
    、コードの冗長性を削減することの利点を、より明確なプログラムの組織構造を

4.3どのようにモジュールへ

4.3.1 import文

#文件名:foo.py
x=1
def get():
    print(x)
def change():
    global x
    x=0
class Foo:
    def func(self):
       print('from the func')
#其他文件
import foo #导入模块foo
a=foo.x #引用模块foo中变量x的值赋值给当前名称空间中的名字a
foo.get() #调用模块foo的get函数
foo.change() #调用模块foo中的change函数
obj=foo.Foo() #使用模块foo的类Foo来实例化,进一步可以执行obj.func()

ファイル内の別のPY foo.py機能を引用すると、インポートFOOを使用する必要があり、

初めてのインポートモジュールは、3つのことをするだろう。

1、ソースfoo.py内のファイルを実行します

ストアド・プロシージャの実行生成されたソースファイルの名前foo.pyの名前空間をもたらす2、

図3は、名前に新しく作成されたモジュールの名前空間参照に、現在のファイルが配置されているモジュールの名前空間ポインティングの名前を実行し、名前空間fooの中で名前を取得、我々は接頭辞を追加する必要があります

注:インポートした後、最初の直接参照foo.py名前空間は、農産物を輸入し、繰り返しコードが実行されないだろうしています

4.3.2参照

print(foo.x)
print(foo.get)
print(foo.change)
#强调1:模块名.名字,是指名道姓地问某一个模块要名字对应的值,不会与当前名称空间中的名字发生冲突
x=1111111111111
print(x)
print(foo.x)

#强调2:无论是查看还是修改操作的都是模块本身,与调用位置无关
import foo

x=3333333333
# foo.get()
foo.change()
print(x)

print(foo.x)
foo.get()

インポートモジュールの仕様4.3.3

カンマ区切り値は行の複数のモジュールに導入することができる、機能ブロック内に導入することができます

# 建议如下所示导入多个模块
# import time
# import foo
# import m

# 不建议在一行同时导入多个模块
import time,foo,m

シーケンス導入

  • I.パイソン内蔵モジュール

  • II。サードパーティのモジュール

  • III。プログラマ定義モジュール

    カスタムモジュールを命名するので+アンダースコア純粋なスタイルを小文字する必要があります

import time
import sys

import 第三方1
import 第三方2

import 自定义模块1
import 自定义模块2
import 自定义模块3

4.3.4モジュール月別名として

import foo as f # f=foo
f.get()
import abcdefgadfadfas as mmm
mmm.f1

4.3.5モジュールは、ファーストクラスのオブジェクトであります

モジュールの割当てに導入することができ、それは送信パラメータとして使用することができ、戻り値が行わすることができ、コンテナの要素として用いることができます

おすすめ

転載: www.cnblogs.com/Henry121/p/12575932.html