検索
ホームページバックエンド開発Python チュートリアルPython での 4 つの主要なデータ型の例を分析する

基本データ型

数値型

Python のデータは、よく知られている int 整数オブジェクト、float 倍精度浮動小数点型、bool 論理オブジェクトなど、すべてのオブジェクトです。すべては単一の要素です。例を 2 つ挙げてください。

プレフィックス 0x を付けて 16 進整数を作成します:

0xa5 # 等于十进制的 165

e を使用して科学表記法で表される浮動小数点数を作成します:

1.05e3 # 1050.0

コンテナ タイプ

複数の要素を収容できるコンテナ オブジェクト。一般的に使用されるものには、リスト リスト オブジェクト、タプル タプル オブジェクト、辞書辞書オブジェクト、セット コレクション オブジェクトなどがあります。 Python は、これらのタイプの変数を非常に簡潔な構文で定義します。

例は次のとおりです。

角かっこ [] のペアを使用してリスト変数を作成します:

lst = [1,3,5] # list 变量

図からわかるように、右側のコンテナは開ループです。これは、コンテナが次の要素の追加と削除を行うことができることを意味します:

Python での 4 つの主要なデータ型の例を分析する

一対のかっこ () を使用してタプル オブジェクトを作成します:

tup = (1,3,5) # tuple 变量

図に示すように、右側のコンテナは閉じられています。つまり、タプルが作成されると、要素をコンテナに追加したりコンテナから削除したりすることはできません。

Python での 4 つの主要なデータ型の例を分析する

ただし、単一の要素を含むタプルをタプルとして解釈するには、カンマを残す必要があることに注意してください。

tup = (1,) # 必须保留逗号

それ以外の場合は要素自体とみなされます:

In [14]: tup=(1)
   ...: print(type(tup)) 
<class &#39;int&#39;>

一対の中括弧 {} を使用し、コロン : を使用して作成しますdict オブジェクト:

dic = {&#39;a&#39;:1, &#39;b&#39;:3, &#39;c&#39;:5} # dict变量

辞書はハッシュ テーブルです。次の図は辞書の「形」を鮮やかに表しています。

Python での 4 つの主要なデータ型の例を分析する

中括弧のペア {} のみを使用してセット オブジェクトを作成します:

s = {1,3,5} # 集合变量

Python コンテナ タイプ、リスト、辞書、tuple、set などを使用すると、強力な関数を簡単に実装できます。

1. 平均を求める

リスト内の最小値と最大値を削除した後、残りの要素の平均を計算します。

def score_mean(lst):
   lst.sort()
   lst2=lst[1:-1]
   return round((sum(lst2)/len(lst2)),1)

lst=[9.1, 9.0,8.1, 9.7, 19,8.2, 8.6,9.8]
score_mean(lst) # 9.1

コード実行プロセス、アニメーションのデモ:

Python での 4 つの主要なデータ型の例を分析する

2. 99 の九九を印刷します

次の形式の乗算表:

1*1=1
1*2=2   2*2=4
1*3=3   2*3=6   3*3=9
1*4=4   2*4=8   3*4=12  4*4=16
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

には合計 10 行があります。i 番目の行の j 番目の列は、次と同じです: j*i、ここで:

  • i 値の範囲: 1

  • j 値の範囲: 1

「分析例」の言語説明によると、

In [13]: for i in range(1,10):
   ...:     for j in range(1,i+1):
   ...:         print(&#39;%d*%d=%d&#39;%(j,i,j*i),end=&#39;\t&#39;)
   ...:     print()

3 というコードに変換されます。サンプリング

サンプル サンプリング を使用します。次の例では、100 個のサンプルからランダムに 10 個のサンプルをサンプリングします。

from random import randint,sample
lst = [randint(0,50) for _ in range(100)]
print(lst[:5])# [38, 19, 11, 3, 6]
lst_sample = sample(lst,10)
print(lst_sample) # [33, 40, 35, 49, 24, 15, 48, 29, 37, 24]

String

Python には C のような文字型 (char) がなく、すべての文字または文字列は str オブジェクトに統一されることに注意してください。たとえば、単一文字 c の型も str です。

よく使われるstr型ですが、まずはよく使うメソッドを5つ挙げてみましょう。

strip は文字列の前後のスペースを削除するために使用されます:

In [1]: &#39;  I love python\t\n  &#39;.strip()
Out[1]: &#39;I love python&#39;

replace は文字列を置換するために使用されます:

In [2]: &#39;i love python&#39;.replace(&#39; &#39;,&#39;_&#39;)
Out[2]: &#39;i_love_python&#39;

join は文字列をマージするために使用されます:

In [3]: &#39;_&#39;.join([&#39;book&#39;, &#39;store&#39;,&#39;count&#39;])
Out[3]: &#39;book_store_count&#39;

title は、単語の最初の文字を大文字にするために使用されます。

In [4]: &#39;i love python&#39;.title()
Out[4]: &#39;I Love Python&#39;

find は、一致する文字列の開始位置インデックスを返すために使用されます。

In [5]: &#39;i love python&#39;.find(&#39;python&#39;)
Out[5]: 7

文字列を適用する例として、 str1 が回転された str2 で構成されているかどうかを判断します。

文字列 stringbook を回転して bookstring を取得します。str1 が回転して得られた str2 であるかどうかを確認するコードを記述します。

判定に変換: str1 が str2 str2 の部分文字列であるかどうか。

下面函数原型中,注明了每个参数的类型、返回值的类型,增强代码的可读性和可维护性。

def is_rotation(s1: str, s2: str) -> bool:
   if s1 is None or s2 is None:
       return False
   if len(s1) != len(s2):
       return False

   def is_substring(s1: str, s2: str) -> bool:
       return s1 in s2
   return is_substring(s1, s2 + s2)

测试函数 is_rotation:

r = is_rotation(&#39;stringbook&#39;, &#39;bookstring&#39;)
print(r)  # True

r = is_rotation(&#39;greatman&#39;, &#39;maneatgr&#39;)
print(r)  # False

代码执行过程,动画演示:

55555

字符串的匹配操作除了使用 str 封装的方法外,Python 的 re 正则模块功能更加强大,写法更为简便,广泛适用于爬虫、数据分析等。

下面这个案例实现:密码安全检查,使用正则表达式非常容易实现。

密码安全要求:

  • 要求密码为 6 到 20 位;

  • 密码只包含英文字母和数字。

import re
pat = re.compile(r&#39;\w{6,20}&#39;) # 这是错误的,因为 \w 通配符匹配的是字母,数字和下划线,题目要求不能含有下划线
# 使用最稳的方法:\da-zA-Z 满足“密码只包含英文字母和数字”
# \d匹配数字 0-9
# a-z 匹配所有小写字符;A-Z 匹配所有大写字符
pat = re.compile(r&#39;[\da-zA-Z]{6,20}&#39;)

选用最保险的 fullmatch 方法,查看是否整个字符串都匹配。

以下测试例子都返回 None,原因都在解释里。

pat.fullmatch(&#39;qaz12&#39;) # 返回 None,长度小于 6
pat.fullmatch(&#39;qaz12wsxedcrfvtgb67890942234343434&#39;) # None 长度大于 22
pat.fullmatch(&#39;qaz_231&#39;) # None 含有下划线

下面这个字符串 n0passw0Rd 完全符合:

In [20]: pat.fullmatch(&#39;n0passw0Rd&#39;)
Out[20]: <re.Match object; span=(0, 10), match=&#39;n0passw0Rd&#39;>

自定义类型

Python 使用关键字 class 定制自己的类,self 表示类实例对象本身。

一个自定义类内包括属性、方法,其中有些方法是自带的。

类(对象):

class Dog(object):
   pass

以上定义一个 Dog 对象,它继承于根类 object,pass 表示没有自定义任何属性和方法。

下面创建一个 Dog 类型的实例:

wangwang = Dog()

Dog 类现在没有定义任何方法,但是刚才说了,它会有自带的方法,使用 dir() 查看这些自带方法:

In [26]: wangwang.__dir__()
Out[26]:
[&#39;__module__&#39;,
&#39;__dict__&#39;,
&#39;__weakref__&#39;,
&#39;__doc__&#39;,
&#39;__repr__&#39;,
&#39;__hash__&#39;,
&#39;__str__&#39;,
&#39;__getattribute__&#39;,
&#39;__setattr__&#39;,
&#39;__delattr__&#39;,
&#39;__lt__&#39;,
&#39;__le__&#39;,
&#39;__eq__&#39;,
&#39;__ne__&#39;,
&#39;__gt__&#39;,
&#39;__ge__&#39;,
&#39;__init__&#39;,
&#39;__new__&#39;,
&#39;__reduce_ex__&#39;,
&#39;__reduce__&#39;,
&#39;__subclasshook__&#39;,
&#39;__init_subclass__&#39;,
&#39;__format__&#39;,
&#39;__sizeof__&#39;,
&#39;__dir__&#39;,
&#39;__class__&#39;]

有些地方称以上方法为魔法方法,它们与创建类时自定义个性化行为有关。比如:

  • init 方法能定义一个带参数的类;

  • new 方法自定义实例化类的行为;

  • getattribute 方法自定义读取属性的行为;

  • setattr 自定义赋值与修改属性时的行为。

类的属性:

def __init__(self, name, dtype):
    self.name = name
    self.dtype = dtype

通过 init,定义 Dog 对象的两个属性:name、dtype。

类的实例:

wangwang = Dog(&#39;wangwang&#39;,&#39;cute_type&#39;)

wangwangDog 类的实例。

类的方法:

def shout(self):
   print(&#39;I\&#39;m %s, type: %s&#39; % (self.name, self.dtype))

注意:

  • 自定义方法的第一个参数必须是 self,它指向实例本身,如 Dog 类型的实例 dog;

  • 引用属性时,必须前面添加 self,比如 self.name 等。

总结以上代码:

In [40]: class Dog(object):
   ...:     def __init__(self,name,dtype):
   ...:         self.name=name
   ...:         self.dtype=dtype
   ...:     def shout(self):
   ...:         print('I\'m %s, type: %s' % (self.name, self.dtype))

In [41]: wangwang = Dog(&#39;wangwang&#39;,&#39;cute_type&#39;)

In [42]: wangwang.name
Out[42]: 'wangwang'

In [43]: wangwang.dtype
Out[43]: 'cute_type'

In [44]: wangwang.shout()
I'm wangwang, type: cute_type

看到创建的两个属性和一个方法都被暴露在外面,可被 wangwang 调用。这样的话,这些属性就会被任意修改:

In [49]: wangwang.name=&#39;wrong_name&#39;
   
In [50]: wangwang.name
Out[50]: &#39;wrong_name&#39;

如果想避免属性 name 被修改,可以将它变为私有变量。改动方法:属性前加 2 个 _ 后,变为私有属性。如:

In [51]: class Dog(object):
   ...:     def __init__(self,name,dtype):
   ...:         self.__name=name
   ...:         self.__dtype=dtype
   ...:     def shout(self):
   ...:         print(&#39;I\&#39;m %s, type: %s&#39; % (self.name, self.dtype))

同理,方法前加 2 个 _ 后,方法变为“私有方法”,只能在 Dog 类内被共享使用。

但是这样改动后,属性 name 不能被访问了,也就无法得知 wangwang 的名字叫啥。不过,这个问题有一种简单的解决方法,直接新定义一个方法就行:

def get_name(self):
   return self.__name

综合代码:

In [52]: class Dog(object):
   ...:     def __init__(self,name,dtype):
   ...:         self.__name=name
   ...:         self.__dtype=dtype
   ...:     def shout(self):
   ...:         print('I\'m %s, type: %s' % (self.name, self.dtype))
   ...:     def get_name(self):
   ...:         return self.__name
   ...:

In [53]: wangwang = Dog(&#39;wangwang&#39;,&#39;cute_type&#39;)

In [54]: wangwang.get_name()
Out[54]: 'wangwang'

但是,通过此机制,改变属性的可读性或可写性,怎么看都不太优雅!因为无形中增加一些冗余的方法,如 get_name。

下面,通过另一个例子,解释如何更优雅地改变某个属性为只读或只写。

自定义一个最精简的 Book 类,它继承于系统的根类 object:

class Book(object):
   def __init__(self,name,sale):
       self.__name = name
       self.__sale = sale

使用 Python 自带的 property 类,就会优雅地将 name 变为只读的。

   @property
   def name(self):
       return self.__name

使用 @property 装饰后 name 变为属性,意味着 .name 就会返回这本书的名字,而不是通过 .name() 这种函数调用的方法。这样变为真正的属性后,可读性更好。

In [101]: class Book(object):
    ...:     def __init__(self,name,sale):
    ...:         self.__name = name
    ...:         self.__sale = sale
    ...:     @property
    ...:     def name(self):
    ...:         return self.__name

In [102]: a_book = Book(&#39;magic_book&#39;,100000)

In [103]: a_book.name
Out[103]: &#39;magic_book&#39;

property 是 Python 自带的类,前三个参数都是函数类型。更加详细的讨论放在后面讨论装饰器时再展开。

In [104]: help(property)
Help on class property in module builtins:

class property(object)
|  property(fget=None, fset=None, fdel=None, doc=None)

如果使 name 既可读又可写,就再增加一个装饰器 @name.setter。

In [105]: class Book(object):
    ...:     def __init__(self,name,sale):
    ...:         self.__name = name
    ...:         self.__sale = sale
    ...:     @property
    ...:     def name(self):
    ...:         return self.__name
    ...:     @name.setter
    ...:     def name(self,new_name):
    ...:         self.__name = new_name

In [106]: a_book = Book(&#39;magic_book&#39;,100000)

In [107]: a_book.name = &#39;magic_book_2.0&#39;

In [108]: a_book.name
Out[108]: &#39;magic_book_2.0&#39;

注意这种装饰器写法:name.setter,name 已经被包装为 property 实例,调用实例上的 setter 函数再包装 name 后就会可写。对于 Python 入门者,可以暂时不用太纠结这部分理论,使用 Python 一段时间后,再回过头来自然就会理解。

以上がPython での 4 つの主要なデータ型の例を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Python:自動化、スクリプト、およびタスク管理Python:自動化、スクリプト、およびタスク管理Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

Pythonと時間:勉強時間を最大限に活用するPythonと時間:勉強時間を最大限に活用するApr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール