如何做商業(yè)推廣網(wǎng)站提高關(guān)鍵詞排名的軟文案例
1、函數(shù)
1.1、函數(shù)的概述
在程序設(shè)計(jì)中,函數(shù)的使用可以提升代碼的復(fù)用率和可維護(hù)性。
系統(tǒng)內(nèi)建函數(shù)pow()進(jìn)行冪運(yùn)算:
a = pow(2,4)
自定義函數(shù)func()
def func(a,b):return a ** b
a=func(2,4)
print(a)
自定義函數(shù)func(),功能是輸出a的b次冪
1.2、函數(shù)的定義
python語言中,函數(shù)通常是由函數(shù)名、參數(shù)列表以及一系列語句組成的函數(shù)體構(gòu)成的。函數(shù)定義一般如下
def 函數(shù)名(參數(shù)列表)函數(shù)體
例:
def foo():print("I am")print("foo")
以上第一的foo()函數(shù)雖然不含任何參數(shù),但是函數(shù)名后的一對(duì)括號(hào)是不能省略的。在實(shí)際應(yīng)用中,稍復(fù)雜的函數(shù)通常會(huì)包含一個(gè)或多個(gè)參數(shù)。
def area(width,height):return width * height
#調(diào)用area
w = 7
h = 9
print("width=",w,"height=",h,"area=",area(w,h))
以下定義了無任何操作的空函數(shù)none()
def none():pass
在Python中,pass語句通??梢杂脕碜鳛檎嘉环?#xff0c;表示什么操作也不執(zhí)行。比如在項(xiàng)目起始階段,如果還沒想好函數(shù)具體實(shí)現(xiàn)時(shí),可以先放置一個(gè)pass語句讓代碼先成功運(yùn)行起來。待項(xiàng)目框架搭建完畢后,在進(jìn)行相應(yīng)的具體實(shí)現(xiàn)。
通常情況下,在Python語言中定義一個(gè)具有特定功能的函數(shù)需要符和以下規(guī)則:
- 函數(shù)代碼塊以def關(guān)鍵字開頭,后接函數(shù)標(biāo)識(shí)符名稱和形參列表;
- 任何傳入的參數(shù)和自變量必須放在圓括號(hào)內(nèi);
- 函數(shù)的第一行語句可以選擇性地使用文檔字符串;
- 函數(shù)內(nèi)容以冒號(hào)起始,并且嚴(yán)格統(tǒng)一縮進(jìn);
- 函數(shù)都有返回值,默認(rèn)返回None
1.3、形參和實(shí)參
在編程語言中,函數(shù)定義的時(shí)形參,調(diào)用的是實(shí)參。
形參(parameter),全稱"形式參數(shù)",不是實(shí)際存在的變量。又稱虛擬變量。用來接收調(diào)用該函數(shù)時(shí)傳入的參數(shù)。
實(shí)參(argument),全稱"實(shí)際參數(shù)",是調(diào)用時(shí)傳遞給函數(shù)的參數(shù)。實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等。
def area(width,height):return width * height
#調(diào)用area
w = 7
h = 9
print("width=",w,"height=",h,"area=",area(w,h))
其中w=7,h=9中的w,h是實(shí)參,area(w,h))中的w,h是形參
可見實(shí)參傳入函數(shù)形參位置,調(diào)用完后不會(huì)影響實(shí)參的值
a = 1
b = 2def func(x,y):x+=1y+=2print(x)#2print(y)#4
func(a,b)
print(a)#1
print(b)#2
func(a,b)等效于func(1,2)、func(x=1,y=2)、func(y=2,x=1)
1.4、函數(shù)的返回值
在Python中,當(dāng)函數(shù)運(yùn)行到return語句時(shí)即執(zhí)行完畢,同時(shí)將結(jié)果返回。因此,可以在函數(shù)內(nèi)部同通過條件判斷和循環(huán)設(shè)置實(shí)現(xiàn)較復(fù)雜的邏輯,并返回預(yù)期的結(jié)果。如果沒有return語句,函數(shù)體內(nèi)所有語句執(zhí)行完畢后默認(rèn)返回None。
def add(x,y):print('x+y=',x+y)return x+y
result = add(y=1,x=2)
print(result)
函數(shù)也可以有多個(gè)返回值
def add(x,y):print('x+y=',x+y)print('x*y=',x*y)return x+y,x*y
a,b = add(y=1,x=2)
print(a,b)
注意返回值和接收變量的關(guān)系是一一對(duì)應(yīng)的
2、函數(shù)分類
2.1 內(nèi)置函數(shù)
Python語言中自帶的函數(shù)叫做內(nèi)建函數(shù),這些內(nèi)建函數(shù)對(duì)大部分常用操作進(jìn)行有效封裝,可以直接調(diào)用,為開發(fā)提供了極大便利。由于內(nèi)建函數(shù)是Python語言內(nèi)置的函數(shù),因此不需要導(dǎo)入任何函數(shù)庫(kù)即可直接調(diào)用。常用的內(nèi)建函數(shù)如下:
-
abs(x):返回x的絕對(duì)值。
-
all(iterable):如果iterable的所有元素都為True,則返回True;否則返回False。
-
any(iterable):如果iterable的任意一個(gè)元素為True,則返回True;否則返回False。
-
ascii(obj):返回一個(gè)可打印的對(duì)象的字符串表示。
-
bin(x):將整數(shù)x轉(zhuǎn)換為二進(jìn)制字符串。
-
bool(x):將x轉(zhuǎn)換為布爾值。如果x為False、0、空列表、空字典和空字符串,則轉(zhuǎn)換為False;否則轉(zhuǎn)換為True。
-
bytearray(iterable):返回一個(gè)由可迭代對(duì)象iterable中的元素組成的字節(jié)數(shù)組。
-
bytes(iterable):返回一個(gè)由可迭代對(duì)象iterable中的元素組成的字節(jié)對(duì)象。
-
callable(obj):如果obj是可調(diào)用的(例如函數(shù)、方法、類),則返回True;否則返回False。
-
chr(i):返回Unicode值為i的字符。
-
classmethod(func):將函數(shù)func轉(zhuǎn)換為類方法。
-
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1):將source編譯為代碼對(duì)象或AST對(duì)象??捎糜趧?dòng)態(tài)執(zhí)行代碼。
-
complex(real, imag):創(chuàng)建一個(gè)復(fù)數(shù),其中real為實(shí)部,imag為虛部。
-
delattr(obj, name):從對(duì)象obj中刪除名為name的屬性。
-
dict():創(chuàng)建一個(gè)空字典。
-
dir(obj):返回一個(gè)包含對(duì)象obj定義的所有屬性和方法名稱的列表。
-
divmod(a, b):返回a除以b的商和余數(shù)的元組。
-
enumerate(iterable, start=0):返回一個(gè)枚舉對(duì)象,其中包含iterable中的每個(gè)元素及其對(duì)應(yīng)的索引。
-
eval(expression, globals=None, locals=None):將字符串expression作為Python代碼執(zhí)行,并返回結(jié)果。
-
exec(obj[, globals[, locals]]):將對(duì)象obj(可以是字符串或代碼對(duì)象)作為Python代碼執(zhí)行。
-
filter(function, iterable):返回一個(gè)由iterable中滿足函數(shù)function的元素組成的迭代器。
-
float(x):將x轉(zhuǎn)換為浮點(diǎn)數(shù)。
-
format(value[, format_spec]):根據(jù)format_spec的格式將value轉(zhuǎn)換為字符串。
-
frozenset(iterable):創(chuàng)建一個(gè)不可變的集合。
-
getattr(obj, name[, default]):返回對(duì)象obj的名為name的屬性的值。
-
globals():返回當(dāng)前全局符號(hào)表的字典。
-
hasattr(obj, name):如果對(duì)象obj具有一個(gè)名為name的屬性,則返回True;否則返回False。
-
hash(obj):返回對(duì)象obj的哈希值。
-
help(obj):提供對(duì)象obj的幫助信息。
-
hex(x):將整數(shù)x轉(zhuǎn)換為十六進(jìn)制字符串。
-
id(obj):返回對(duì)象obj的唯一標(biāo)識(shí)符。
-
input([prompt]):從標(biāo)準(zhǔn)輸入讀取一行字符串。
-
int(x[, base]):將x轉(zhuǎn)換為整數(shù)。如果base提供,則將x視為base進(jìn)制的字符串,將其轉(zhuǎn)換為十進(jìn)制。
-
isinstance(obj, classinfo):如果對(duì)象obj是classinfo的實(shí)例或派生類的實(shí)例,則返回True;否則返回False。
-
issubclass(class, classinfo):如果class是classinfo的派生類,則返回True;否則返回False。
-
iter(obj[, sentinel]):返回一個(gè)迭代器對(duì)象。
-
len(obj):返回對(duì)象obj的長(zhǎng)度(元素個(gè)數(shù))。
-
list(iterable):將可迭代對(duì)象iterable轉(zhuǎn)換為列表。
-
locals():返回當(dāng)前局部符號(hào)表的字典。
-
map(function, iterable):將函數(shù)function應(yīng)用于iterable中的每個(gè)元素,并返回一個(gè)包含結(jié)果的迭代器。
-
max(iterable[, key]):返回iterable中的最大元素??梢允褂胟ey函數(shù)指定比較規(guī)則。
-
memoryview(obj):返回對(duì)象obj的內(nèi)存視圖,可以用于對(duì)對(duì)象進(jìn)行原生內(nèi)存操作。
-
min(iterable[, key]):返回iterable中的最小元素。可以使用key函數(shù)指定比較規(guī)則。
-
next(iterator[, default]):返回迭代器iterator的下一個(gè)元素。如果已經(jīng)到達(dá)迭代器的末尾,則返回default。
-
object():返回一個(gè)沒有任何特別行為的新對(duì)象。
-
oct(x):將整數(shù)x轉(zhuǎn)換為八進(jìn)制字符串。
-
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None):打開文件,返回文件對(duì)象。
-
ord?:返回字符c的Unicode值。
-
pow(x, y[, z]):返回x的y次方,如果提供了參數(shù)z,則計(jì)算結(jié)果的模為z。
-
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False):將對(duì)象打印到流文件,默認(rèn)為標(biāo)準(zhǔn)輸出。
-
property(fget=None, fset=None, fdel=None, doc=None):創(chuàng)建一個(gè)屬性,其中fget、fset和fdel為獲取、設(shè)置和刪除屬性值的方法。
-
range(stop):返回一個(gè)從0到stop-1的整數(shù)序列。
-
repr(obj):返回對(duì)象obj的字符串表示形式。
-
reversed(seq):返回一個(gè)逆序迭代器,用于迭代序列seq的元素。
-
round(number[, ndigits]):返回一個(gè)浮點(diǎn)數(shù)的四舍五入值。
-
set(iterable):創(chuàng)建一個(gè)集合,其中包含iterable中的元素。
-
setattr(obj, name, value):將對(duì)象obj的屬性name設(shè)置為value。
-
slice(stop):創(chuàng)建一個(gè)切片對(duì)象,用于切取從0到stop-1的元素。
-
sorted(iterable[, key[, reverse]]):返回iterable排序的副本。
-
staticmethod(func):將函數(shù)func轉(zhuǎn)換為靜態(tài)方法。
-
str(obj):將對(duì)象obj轉(zhuǎn)換為字符串。
-
sum(iterable[, start]):返回iterable的求和結(jié)果。
-
super([type[, object-or-type]]):返回一個(gè)鏈?zhǔn)綄?duì)象,用于在多重繼承中調(diào)用父類方法。
-
tuple(iterable):將可迭代對(duì)象iterable轉(zhuǎn)換為元組。
-
type(obj):返回對(duì)象obj的類型。
-
vars([object]):返回對(duì)象object的__dict__屬性,或返回當(dāng)前局部符號(hào)表的字典。
-
zip(*iterables):將多個(gè)迭代器作為參數(shù),將對(duì)應(yīng)位置的元素組合成元組。
-
1__import__ (name[, globals[, locals[, fromlist[, level]]]]):使用import機(jī)制導(dǎo)入一個(gè)模塊。
-
openpyxl():用于操作Excel文件的庫(kù)。
在Python語言中,除內(nèi)建函數(shù)外的其他類型函數(shù)通常被稱為第三方函數(shù)。
a = abs(-100)
b = max(-1,4,0,-2,13,4)
print(a,b)#100 13
Python語言常用的內(nèi)建函數(shù)還包括數(shù)據(jù)類型轉(zhuǎn)換函數(shù)。
print("int('12'):",int('12'))
print("int(12.5):",int(12.5))
print("float('12.5'):",float('12.5'))
print("str(1.25):",str(1.25))
print("str(10):",str(10))
print("bool(1):",bool(1))#True
print("bool(''):",bool(''))#False
Python語言中,還可以把函數(shù)名賦給一個(gè)變量,相當(dāng)于給這個(gè)函數(shù)起了一個(gè)別名。
a = abs
print(a(-1))
2.2 自定義函數(shù)
當(dāng)內(nèi)建函數(shù)不能滿足要求時(shí),開發(fā)者可以根據(jù)實(shí)際需要自定義函數(shù)。函數(shù)自定義完成后,開發(fā)者可以在其他代碼處通過函數(shù)名調(diào)用。
def printme(str):"函數(shù)功能:打印傳入的字符串"print(str)printme("調(diào)用自定義函數(shù)")
在Python語言中,內(nèi)建函數(shù)可以直接使用,第三方函數(shù)需要使用import命令導(dǎo)入相應(yīng)的庫(kù)才能使用。對(duì)于自定義函數(shù),其定義和調(diào)用可以在用一個(gè)文件中,也可分離成不同的文件。
定義一個(gè)func.py并寫入hello函數(shù)
def hello():print("你好")
在一個(gè)新的xx.py文件中調(diào)用hello
from func import hello
hello()
3、函數(shù)參數(shù)
3.1 參數(shù)種類
函數(shù)參數(shù)分為可變類型和不可變類型,其調(diào)用結(jié)果是不同的。
- 可變類型:類似c++的引用傳遞。如列表、字典等。如果傳遞的參數(shù)是可變類型,則在函數(shù)內(nèi)部對(duì)傳入?yún)?shù)的修改會(huì)影響到外部變量。
- 不可變類型:類似c++的值傳遞,如整數(shù)、字符串、元組等。如果傳遞到達(dá)參數(shù)是不可變類型,則在函數(shù)內(nèi)部對(duì)傳入的參數(shù)的修改不會(huì)影響到外部變量。
不可變類型參數(shù),例:
def change_int(a):a=10
b=2
change_int(b)
print(b)#結(jié)果是2
b的值不變
可變類型參數(shù),例:
def change_int(my_list):my_list.append([1,2,3])print("函數(shù)內(nèi)修改后的變量:", my_list)#[10, 20, 30, [1, 2, 3]]my_list =[10,20,30]
change_int(my_list)
print("函數(shù)外變量的值:", my_list)#[10, 20, 30, [1, 2, 3]]
my_list的值改變
3.2 位置參數(shù)
調(diào)用函數(shù)時(shí),Python語言必須將函數(shù)調(diào)用中的每個(gè)實(shí)參都關(guān)聯(lián)到函數(shù)的相應(yīng)形參。最簡(jiǎn)單的關(guān)聯(lián)方式是基于實(shí)參的順序,這種關(guān)聯(lián)方式被稱為位置實(shí)參。
def student_info(name,age):print("my name is",name ,age," years old")student_info('jack',24)
輸出
my name is jack 24 years old
3.3 默認(rèn)參數(shù)
編寫函數(shù)時(shí),可給每個(gè)形參指定默認(rèn)值。注意,必選參數(shù)在前,默認(rèn)參數(shù)在后。
以下錯(cuò)誤示例
def student_info(name='liuj',age):print("my name is",name ,age," years old")
正確操作
def student_info(name,age=24):print("my name is",name ,age," years old")student_info('jack')
3.4 不定長(zhǎng)參數(shù)
開發(fā)者可以將一個(gè)list或tuple傳進(jìn)來
def sum(numbers):i=0for n in numbers:i = i + nreturn i
print(sum([1,2,3]))#6
print(sum([1,2,3,4]))#10
也可以在函數(shù)參數(shù)前面添加一個(gè)*號(hào)把該參數(shù)定義為不定長(zhǎng)參數(shù)
def sum(*numbers):i=0for n in numbers:i = i + nreturn i
print(sum())#0
print(sum(1,2,3,4))#10
num = [1,2,3]
print(sum(*num))#6
3.5 關(guān)鍵字參數(shù)
關(guān)鍵字實(shí)參是傳遞參數(shù)時(shí)使用“名稱-值”對(duì)的方式,在實(shí)參中將名稱和值關(guān)聯(lián)起來。無須考慮函數(shù)調(diào)用中的實(shí)參順序。
def func(a,b):return pow(a,b)
print(func(b=4,a=3))#81
3.6 命名關(guān)鍵字參數(shù)
如果要限制關(guān)鍵字參數(shù)的名字,可以使用命名關(guān)鍵字參數(shù)。和關(guān)鍵字參數(shù)**kw不同,如果沒有可變參數(shù),命名參數(shù)關(guān)鍵字參數(shù)就必須加一個(gè) * 號(hào)作為特殊分隔符。如果缺少 * ,Python語言解釋器將無法識(shí)別位置參數(shù)和命名關(guān)鍵字參數(shù)。
例如,若只接收age和city作為關(guān)鍵字參數(shù),可以采用如下形式。
def person_info(name,denger,*,age,city):print(name,denger,age,city)person_info('jack','M',age=18,city='guangzhou')
注意
*表示不定長(zhǎng)參數(shù)
**表示不定長(zhǎng)的關(guān)鍵字參數(shù)
3.7 參數(shù)組合
在Python語言中定義函數(shù),開發(fā)者可以組合使用這些參數(shù)(必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù))。注意參數(shù)定義是有順序的。定義順序必須是:必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)、關(guān)鍵字參數(shù)。
def func(a,b,c=0,*args,**kw):print(a,b,c,args,kw)func(1,2,3,'a','b',x=4,y=7,z=8)
運(yùn)行結(jié)果:
1 2 3 ('a', 'b') {'x': 4, 'y': 7, 'z': 8}
4、函數(shù)式編程
- 函數(shù)式編程是一種編程范式,是面向數(shù)學(xué)的抽象,其將計(jì)算描述為一種表達(dá)式求值。
- 函數(shù)式編程中的函數(shù)不是指計(jì)算機(jī)的函數(shù),而是指數(shù)學(xué)中的函數(shù),即自變量的映射。
- 函數(shù)式編程的一個(gè)特點(diǎn)是,允許把函數(shù)本身作為參數(shù)傳入另一個(gè)函數(shù),還允許返回一個(gè)函數(shù)。
4.1、高階函數(shù)
接受函數(shù)為參數(shù),或者把函數(shù)作為結(jié)果返回的函數(shù)稱為高階函數(shù)。
word = ['apple','blue','car','did']
def reverse(word):return word[::-1]print(sorted(word,key=len))print(reverse('testing'))print(sorted(word,key=reverse))
4.2、匿名函數(shù)
所謂的匿名函數(shù),就是不再使用def語句這樣的標(biāo)準(zhǔn)形式定義的函數(shù),Python經(jīng)常使用lambda來創(chuàng)建匿名函數(shù)。
lambda arg1,arg2…:expression
sum = lambda arg1,arg2:arg1+arg2
print(sum(2,3))