[高レベルの関数とオブジェクト指向]の開発のためのPythonベース

Pythonの基本的な演習[高度な機能とオブジェクト指向]

1.(1)の閉鎖がある満たすために必要な条件は何ですか?
関数外の非グローバル変数を使用して、内部機能B.関数関数外で定義A.外側C.最終的な関数は、関数への参照を返す
平方根を計算するためのクロージャを作成するために、上記の3つの条件に応じて、(2)機能
プログラム:[植字プログラムに従ってPythonプログラミング仕様は、空間コーディングレベルに対応することに留意されたいです]

#函数闭包
#outerfunc为外函数
import math
def outerfunc():
    y =int(input())      #y是外函数的非全局变量

    #innerfunc是内函数
    def innerfunc():

        #内函数使用了外函数的非全局变量
        return math.sqrt(y)

    #外函数最终返回的是内函数的引用
    return innerfunc
#然后执行如下代码:
func = outerfunc()
sqrtone=func()
print("内函数计算后的平方根是:"+str(sqrtone))
#输入16输出4
#因为外函数最终返回的是内函数的引用,所以变量func为内函数innerfunc的引用,
#func(),变量后面加了括号,则是执行内函数,所以最终结果为4。
#内函数实现的是返回外函数的引用,外函数实现的是具体的运算功能

結果が示されている。
ここに画像を挿入説明
2.従来の機能次のように
機能内容
、テスト機能はデコレータで作成され主張デコレータ機能は装飾装飾的な機能に印刷パラメータにパラメータがあり、次のように必要な結果を実行します。
ここに画像を挿入説明

程序:
#开始创建装饰器
def q(w1):
    def inner(num1,num2):
        print("装饰器开始装饰:")
        print("--打印装饰器的入参为:",num1,num2,"我是装饰器的入参啊")
        w1(num1,num2)
        return  'huatec'
    return inner
@q
def test(num1,num2):
    print("被验证函数开始,被修饰函数入参之和为:",num1+num2)
    return 'huatec'
#调用test函数
print(test(1,2))

結果が示されている:
ここに画像を挿入説明
3.100 1~3のすべての範囲を印刷するために使用されるフィルタ関数は、数で割り切れることができる
プログラム。

 #filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
# 该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
import math
#先定义判断函数,返回判断后的结果值
def bszc(x):
    return x%3==0
#开始调用过滤函数,过滤时需要的参数是判断函数和列表,将列表中的元素一一放到判断函数中判断,过滤后返回满足判断函数的元素所组成的新列表,此时是引用变量
newlist = filter(bszc,range(1, 101))
print(list(newlist))
#print函数在打印变量时一般会以字符串形式显现,如果没有打印出目标变量而是字符串的话,用强制转换来进行(据具体的类型而变换)

結果が示されています。
ここに画像を挿入説明
この数を減らす階乗を使用して番号を入力します:
ここに画像を挿入説明
プログラム:


#reduce() 函数会对参数序列中元素进行[累积。]函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
from functools import reduce
def leiji(x,y):
    return x*y
#随意给个数求阶乘,就要生成一个列表,这里创建列表
list  = []
#随意给一个数
i=int(input())
for x in range(1,i+1):
    list.append(x)
    print(list)
#for代表循环取数。
#append()函数代表将值插入到列表最后。
reduce(leiji,list)
print(int(reduce(leiji,list)))

結果が示されている:
ここに画像を挿入説明
5.過負荷2つのリストの対応する要素を乗算し、乗算を達成[2つの数値を乗算すると、元の方法、もちろん、二つのリスト又はリストを乗算した結果]。
手順:

 #方法是定义在类中的,函数是直接定义的,题中要求做到方法的重载,就要定义一个类,定义方法,再方法重载
import numpy as np
class TestChengFa(object):
    def __init__(self,high,old):
        self.high=high
        self.old=old
    def chenfa(self,a,b):
        return a*b
#进行方法的重载,将两个数相乘改为两个列表相乘
    def chenfa(self,listone,listtwo): #形参定义为两个列表
        listthree= np.multiply(np.array(listone),np.array(listtwo))
        print(listthree)
#创建对象
jack = TestChengFa(2,20)
print("开始调用原方法:")
print(jack.chenfa(4,5))
#重载方法的调用
list1 = [1,2,3,4]
list2 = [5,6,7,8]
print("开始调用重载的方法")
jack.chenfa(list1,list2)

示されているように:
ここに画像を挿入説明
6.完全な魚や水鳥鳥が多重継承を作成します。図に示すように:
ここに画像を挿入説明
プログラム:

 #定义鱼类
class Fish(object):
    def __init__(self,name):
        self.name=name
        print("这是鱼的构造方法,它的名字是:"+self.name)
    def aoyou(self):
        print("鱼的特点是会遨游")
#定义鸟类
class Bird(object):
    def __init__(self,name):
        self.name=name
        print("这是鸟的构造方法,它的名字是:"+self.name)
    def feixiang(self):
        print("鸟的特点是会飞翔")
#定义水鸟类来多继承鱼儿和鸟儿的特点,此时的水鸟就是鱼儿和鸟儿的派生类
class WaterBird(Fish,Bird):
    def __init__(self,name):
        self.name=name
        print("这是水鸟的构造方法,它的名字是:"+self.name)
#开始创建鸟类,鱼类,水鸟类的对象,比较他们之间的异同来体会多继承
fishone=Fish("小黄鱼")
fishone.aoyou()
birdone=Bird("小鸟")
birdone.feixiang()
waterbirdone=WaterBird("小水鸟")
#水鸟机继承了鸟和鱼,所以能调用他们的方法
waterbirdone.feixiang()
waterbirdone.aoyou()

図に示す結果:
ここに画像を挿入説明
以下のように7前Pythonのクラスがある:
ここに画像を挿入説明
インスタンスを作成し、に従っての態様は、それぞれクラスおよびインスタンスのプロパティをプリントアウト、クラス9の印刷属性要件、5カテゴリー」によれば、インスタンス属性である「インスタンス属性」。以下に示すように印刷することができるすべての属性、6のクラス属性値の前記印刷要求、印刷部の結果をプリントアウトするプロパティ「方法、
ここに画像を挿入説明
手順:

 class Cat(object):
#类属性,位于方法外面,类里面,被类的所有实例对象共有
    number=0
    def __init__(self,age):
        #self.属性的属性都是实例属性
        self.age=age
        print("这是猫的构造方法,年龄是:"+self.age+" 它的实例属性是age,类属性是number")
#开始按要求打印类属性和实例属性
catone=Cat("5")
#开始用实例打印类属性
print("cat的类属性是:"+str(catone.number))#默认是0
#打印出9
Cat.number=9
print("cat的类属性是:"+str(catone.number))
#体验下用另一个对象调用类属性,因为被共用,所以打印出的值还是9
cattwo=Cat("5")
print("cat的类属性还是:"+str(cattwo.number))
#开始用实例打印实例属性
print("cat的实例属性是:"+str(catone.age))
#按照类.属性的方式打印所有属性,其实只能打印类属性
Cat.number=6
print("Cat的类属性是:"+str(Cat.number))

结果如图:
ここに画像を挿入説明
8.创建一个类,要求内部包含一个用于求和的类方法,一个用于打印求和结果的静态方法,如图所示:
ここに画像を挿入説明
程序:

class TestOne(object):
    #定义求和的类方法
    @classmethod
    def qiuhe(cls,a,b):
        return a+b
    #定义用于打印求和结果的类方法,静态方法和类没有直接关系,起到类似函数的作用
    @staticmethod
    def dayin(a,b):
        print("求和后的结果是:"+str(TestOne.qiuhe(a,b)))
#开始调用类方法
TestOne.qiuhe(3,4)
#开始调用静态打印方法
testone=TestOne()
testone.dayin(3,4)
 

结果如图:
ここに画像を挿入説明
9.参照“模板”章节课件,完成模块的制作,发布和安装
(1)模块的制作
ここに画像を挿入説明
#按照上图目录结构,创建名为suba.subb的包,在包里分别创建aa.py,bb.py,cc.py,dd.py的模块文件,每个模块都完成一定的功能(即定义一个函数),创建过程省略,结果如图:
ここに画像を挿入説明
#再创建名为setup的.py文件,与suba.subb在同一目录下,并编辑文件,指明要包含aa.py,bb.py,cc.py,dd.py模块文件以及即将发布的模块包的版本,作者和描述信息,如图:
ここに画像を挿入説明
ここに画像を挿入説明
(2)模块的发布
#【在终端进入pycharm的默认工作台目录:C:\Users\任重文\PycharmProjects\untitled,该目录下存放了所有的工程文件】
ここに画像を挿入説明
ここに画像を挿入説明
#开始构建模块【在终端执行python setup.py build命令】

ここに画像を挿入説明
#构建完成后工作台文件夹出现了build-lib目录,该目录下有suba.subb两个模块包,如图:
ここに画像を挿入説明
ここに画像を挿入説明
#构建后的目录结构
ここに画像を挿入説明
#生成压缩发布包【即模块的打包】
ここに画像を挿入説明
#打包后的目录结构
ここに画像を挿入説明
(3)模块的安装
#找到模块的压缩包,对压缩包进行解压
ここに画像を挿入説明
#解压后的文件结构
ここに画像を挿入説明
#安装模块【在终端执行命令python setup.py install】
ここに画像を挿入説明
#安装后的模块目录是D\python\lib\site-packages,pycharm上打开后的图片
ここに画像を挿入説明

实验总结与分析:

質問1:以下に示すように第五の質問は、問題があったんでした:
ここに画像を挿入説明
ソリューション:
新規インストールのための#1のPythonソフトウェア我々はインポートする必要がある場合、基本的なライブラリーに加えて、他の関数がライブラリに存在しませんこれは、「XXX」という名前のモジュールを要求しません。次の問題に対処するには?
彼は、関連するモジュールなかった場合1.決定
XXX(ライブラリ名)のインポート*からのPythonシェル-入力にcmd-「XXX」という名前のモジュールはセキュリティがないことを証明するために表示されない場合は
ここに画像を挿入説明
、モジュールが見つからなかった2、モジュールのダウンロード[ダウンロードモジュールは: UCIモジュールライブラリアドレス:https://www.lfd.uci.edu/~gohlke/pythonlibs/]
インターフェイスアドレス:
ここに画像を挿入説明
目的のファイル(すなわちnumpyの)用のライブラリ名検索の私達の使用に応じて、適切なバージョンを見つけるため3.ctrl + F図:
ここに画像を挿入説明
CMD-入力ピップ(パイソン)+リポジトリパス+ファイル名をインストールのバージョン番号:4に取り付けられ、単にダウンロードしたファイルである
[numpyの] pip3.7インストールD:\ Pythonの\スクリプト\ numpyの-1.15.0rc1 + MKLは、 cp37m-win_amd64.whl - CP37
#、このように、あまりにも複雑な問題を持っていない
他の第2の方法では5を、コマンドラインで直接実行:PIP3はnumpyのインストール
ここに画像を挿入説明
に成功し、インストール後に#プロンプトを
ここに画像を挿入説明
の成功解像度にここ#
#の道これらの演習を行うときに、彼のショットのいくつかは明確ではないものを、私たちはやると見ていることを確認します。しかし、このプログラムは有用であると期待して、オンライン検索の彼自身の考え方や知識の詳細なメモを書くことがあります。

おすすめ

転載: blog.csdn.net/weixin_43306493/article/details/90601128