Pythonの研究ノート--Day03
前ので、小さなことの数日は、今日は三日目、機能の運動の始まりである、いくつかの時間を遅らせました。
Pythonの関数
機能は、特定の機能を実行することができ、再利用可能なコードの集合体である、と助け、私たちは美しく、より簡潔な書き込みコードに関数を記述します。私たちはPythonの世界を開いたときに実際には、我々は、機能--print機能にさらされています。当社は、ユーザー定義関数と呼ばれる独自の関数を定義することができます。
関数の定義
単純なルールは、(新人チュートリアルから取られた)関数を定義しました:
- ファンクションブロックDEFキーワード初めは、)(名称および機能識別子括弧が続きます。
- すべての受信パラメータと引数は括弧の中央に配置する必要があります。括弧の間でパラメータを定義するために使用することができます。
- 最初の文関数は、選択的に説明文字列を使用することができます - 機能命令を格納するため。
- 機能の内容コロン、およびインデントを開始します。
- リターン[式]エンド機能は、選択的に呼び出し元に値を返します。リターンなしと同等の表現せずにリターン。
定義された関数の構文
def function_name(parameters):
"""函数说明"""
function_suite
return [expression]
例
階乗の定義された関数
def factorial(num):
"""
求阶乘
:param num:非负整数
:return: num的阶乘
"""
result = 1
for n in range(1, num +1):
result *= n
return result
関数パラメータを算出し、以下に定義されるような機能の追加など、デフォルト値に設定することができます
def add(num1=1, num2=1):
"""计算加法,如果不输入函数值,就会返回2"""
return num1 + num2
うまく時間の不確実なパラメータの数などのように、我々は変数パラメータを使用する必要があります
def add(*args):
total = 0
for val in args:
total += val
return total
私たちは、パラメータなしで関数を定義することができます
def hello():
print("hello, world!")
(新人のチュートリアルから取られた)ラムダを使って無名関数
- ただ、ラムダ式、関数本体はDEFよりもはるかに簡単です。
- ラムダ式は、代わりにコードブロックの本体です。私たちは、ラムダ式に限定されたロジックをパッケージ化することができます。
- ラムダ関数は、独自の名前空間を持ち、独自の引数リストやグローバル名前空間のパラメータの外側にアクセスすることはできません。
- ラムダ関数のルックスは、単一の行を書きますが、作業効率を高めるために小さな関数を呼び出すときに目的がスタックメモリを占有していないCまたはC ++インライン関数に相当することはできませんが。
文法
lambda [arg1 [,arg2,.....argn]]:expression
たとえば、上記の二つの機能を定義することができる添加しました
sum = lambda num1, num2: num1 + num2
コールは、Aの方法で使用することができた場合sum(1, 2)
モジュール
私の理解では、モジュールは、そのような私はいくつかの方法を定義するモジュールなどのメソッドの集合であるように、それぞれ、行うために使用されている他のモジュールでは、我々はインポートすることによって、このモジュール方式をインポートすることができ、かつ異なるモジュールでありますこの方法はそれに名前のメソッドを参照すると、競合していないときにのみ、競合を買う余裕はない
module1.py
def hello():
print("hello, world!")
module2.py
def hello():
print("hello, python!)
test.py
import module1 as m1
import module2 as m2
m1.hello()
m2.hello()
これは、競合が導入された時、競合を余裕がない場合であります
from module1 import hello
form module2 import hello
hello()
それは第二の時間参照ハロー第一の基準上書きされますので、今回は、法のモジュール2、ないModule1のメソッドを呼び出します。
私はまだモジュールがよくで書かれている方法を覚えています
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:
def main():
pass
if __name__ == "__main__":
main()
一般的なフレームワークは、我々はあなたがモジュールをインポートするときにコードを実行し、モジュールはまた、コードを直接実行することができます定義した場合、我々は、この形式上必要なので、それは、我々は、コードが実行されることを望まないことがあります以下の方法が実装される場合、そのコードはメイン関数で記述することができ、このモジュールで実行される場合にのみ、直接モジュールを実行します。
弦
かなり多くのだ、と方法が特殊な文字列は、いわゆる文字列は、ゼロ以上の文字の有限シーケンスです。ここでは、文字列の基本的な使用を見てです
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:
def main():
str1 = "hello, world!"
# len函数计算长度
print("%s的长度为:%d" % (str1, len(str1)))
# 获得字符串首字母大写的拷贝
print(str1.capitalize())
# 获得字符串全部大写的拷贝
print(str1.upper())
# 从字符串中查找子串所在位置
print(str1.find('orl'))
print(str1.find('els'))
# 返回子串的索引,若查找不到会有异常
print(str1.index('or'))
# print(str1.index('shit')) 异常
# 检查字符串是否以指定的字符串开头
print(str1.startswith('hell'))
print(str1.startswith('sas'))
# 检查字符串是否以指定的字符串结尾
print(str1.endswith('!'))
print(str1.endswith('123'))
# 将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.center(50, '*'))
# 将字符串以指定的宽度靠右放置左侧填充指定的字符
print(str1.rjust(50, ' '))
str2 = 'abcd1234'
# 获取指定位置的字符
print(str2[2])
# 字符串切片(从指定的开始索引到指定的结束索引)
print(str2[2:6])
print(str2[2:])
print(str2[2::2])
print(str2[::2])
print(str2[::-1])
print(str2[-3:-1])
# 检查字符串是否由数字构成
print(str2.isdigit())
# 检查字符串是否以字母构成
print(str2.isalpha())
# 检查字符串是否以数字和字母构成
print(str2.isalnum())
# 修剪字符串两边的空格
str3 = " sdf "
print(str3.strip())
if __name__ == "__main__":
main()
リスト
コードは言って多くを示してい
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:
def main():
list1 = [1, 2, 3, 4, 123]
print(list1)
list2 = ['hello'] * 5
print(list2)
# 计算列表长度(元素个数)
print("list1的长度为:", len(list1))
# 下标(索引)运算
print(list1[0])
print(list1[3])
print(list1[-1])
print(list1[-4])
# 修改
list1[2] = 123123
print(list1)
# 添加元素
list1.append('11111')
list1.insert(0, 8888)
list1 += [400, 500]
print(list1)
# 删除元素
list1.remove(2)
del list1[0]
print(list1)
# 清空列表元素
list1.clear()
print(list1)
if __name__ == "__main__":
main()
上記は、プレゼンテーションリストスライシング操作に続いて、基本的な操作です。
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:
def main():
nums = [1, 2, 3, 4, 5, 6, 7]
for num in nums:
print(num, end=" ")
print()
# 列表切片
nums1 = nums[2:5]
print(nums1)
# 通过切片进行复制列表
nums2 = nums[:]
print(nums2)
nums3 = nums[-1:-3]
print(nums3)
# 反向切片进行列表倒转
nums4 = nums[::-1]
print(nums4)
if __name__ == "__main__":
main()
リストソート
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:列表排序
def main():
list1 = ['orange', 'apple', 'zoo', 'zebra', 'egg']
list2 = sorted(list1)
print(list2)
# 倒置
list2 = sorted(list1, reverse=True)
print(list2)
# 通过key关键字根据指定字符串长度进行排序而不是默认的字母表顺序
list2 = sorted(list1, key = len)
print(list2)
# 对列表直接进行排序
list1.sort()
print(list1)
if __name__ == "__main__":
main()
以下のように、リストのリストを作成するために、生成文法によると、
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:列表的生成式语法创建列表
import sys
def main():
list1 = [x for x in range(1, 15)]
print(list1)
list2 = [x + y for x in 'abcd' for y in '1234']
print(list2)
# 用列表的生成表达式语法创建列表容器
# 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
f = [x ** 2 for x in range(1, 1000)]
print(sys.getsizeof(f)) # 查看对象占用内存的字节数
print(f)
# 请注意下面的代码创建的不是一个列表而是一个生成器对象
# 通过生成器可以获取到数据但它不占用额外的空间存储数据
# 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f)) # 相比生成式生成器不占用存储数据的空间
print(f)
for val in f:
print(val)
if __name__ == "__main__":
main()
タプル
同様のリストとタプルは、タプルの要素は変更することができないことを除いて。
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:元组
def main():
# 定义元组
t = (1, 'abc', 1.2, [1, 2, 'a'])
# 根据索引获取
print(t[1])
# 遍历元组中的值
for item in t:
print(item)
# 元组转换列表
list1 = list(t)
print(list1)
# 列表转换元组
list1[1] = "哈哈"
t = tuple(list1)
print(t)
if __name__ == "__main__":
main()
セット
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:集合操作
def main():
set1 = {1, 2, 3, 3, 2, 23, 12}
print(set1)
# len获取长度
print('集合的长度是:', len(set1))
# 列表转换集合
list1 = [1, 2, 3, 4, 23, 1]
set2 = set(list1)
print(set2)
# 元组转换集合
tuple1 = (1, 2, 3, 12, 34)
set2 = set(tuple1)
print(set2)
# 集合添加元素
set2.add(123)
set2.update([1, 1123])
print(set2)
# 集合删除元素
set2.remove(123)
set2.discard("abf")
print(set2)
# 遍历集合
for item in set2:
print(item)
# 集合交集、并集、差集、对称差运算
set3 = {1, }
print(set1 & set2)
# print(set1.intersection(set2))
print(set1 | set2)
# print(set1.union(set2))
print(set1 - set2)
# print(set1.difference(set2))
print(set1 ^ set2)
# print(set1.symmetric_difference(set2))
# 判断子集和超集
print(set2 <= set1)
# print(set2.issubset(set1))
print(set3 <= set1)
# print(set3.issubset(set1))
print(set1 >= set2)
# print(set1.issuperset(set2))
print(set1 >= set3)
# print(set1.issuperset(set3))
if __name__ == "__main__":
main()
辞書
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:字典
def main():
dict1 = {'a': 1, 'b': 2, 'c': 3}
print(dict1['a'])
for elem in dict1:
print(elem, dict1[elem])
# 修改
dict1['c'] = 'asdf'
print(dict1)
# 添加
dict1['d'] = "ads"
print(dict1)
# 获取
print(dict1["a"])
print(dict1.get('a', 111))
# 删除
print(dict1.popitem())
print(dict1.popitem())
print(dict1.pop('a', 111))
print(dict1)
# 清空
dict1.clear()
print(dict1)
if __name__ == "__main__":
main()
エピローグ
数日遅れているため、学校、リスト、辞書、セット、タプル、文字列の三日目と見なさ今日ので、データ型のこれらのタイプは、ああ覚えているのに使用されます!
エラーがある場合、私の記事を見つけるか、何かいいアイデアは、私に連絡することができている場合は、私たちが一緒に進行一緒に勉強し、私のメールアドレスは[email protected]です
のは、これらの複数の操作を行いましょう!