Python基礎(chǔ) - 函數(shù)基礎(chǔ)

知識回顧

列表声诸,字典,元組退盯,集合

列表(list):[];可變彼乌,有序泻肯;元素是任何類型的數(shù)據(jù)
增:append,insert慰照,extend
刪:del灶挟,remove,pop
改:列表[下標(biāo)] = 新值
查:列表[下標(biāo)]毒租,切片稚铣,遍歷

字典(dict):{};可變,無序墅垮;元素是鍵值對惕医,鍵是不可變的惟一的,值可以是任何類型的數(shù)據(jù)
增:字典[key] = 值算色,setdefault(key,默認(rèn)值)抬伺,update
刪:del,pop灾梦,clear
改:字典[key] = 值
查:字典[key]峡钓,字典.get(key),字典.get(key,默認(rèn)值),遍歷

元組(tuple):();不可變,有序斥废;元素是任何類型的數(shù)據(jù)
查:和列表一樣
tuple1 = 1, 2, 3
tuple2 = (10,)
x,y = (10, 20)
x,y = 10, 20
x, *nums, y = tuple1

集合(set):{};可變椒楣,無序;元素是不可變的惟一的
增:add牡肉,update
刪:remove
改:遍歷
集合運算:包含(>=,<=),交集(&)捧灰,并集(|),差集(-)统锤,補(bǔ)集(^)

淺拷貝和深拷貝

import copy

copy.copy(對象):淺拷貝
copy.deepcopy(對象):深拷貝

拷貝:將變量中的值復(fù)制一份毛俏,產(chǎn)生新的數(shù)據(jù)。然后將新的數(shù)據(jù)對應(yīng)的地址返回饲窿。
淺拷貝:直接拷貝地址(切片和字典列表的copy方法都是淺拷貝)
深拷貝:將地址地址對應(yīng)值拷貝煌寇,產(chǎn)生新的地址

a1 = [1, 2]
a2 = {'a': 10}
list1 = [a1, a2]
# 淺拷貝
# list2 = list1.copy()
# list2 = copy.copy(list1)

# 深拷貝
list2 = copy.deepcopy(list1)
list2.append(10)
print(list1)
print(list2)
list2[0].append(100)
print(list1)
print(list2)

字典和列表的應(yīng)用

列表的元素和字典的值可以是任何類型的數(shù)據(jù)

1.列表中有字典

persons = [
    {'name': '張三', 'age': 30, 'sex': '男'},
    {'name': '李四', 'age': 25, 'sex': '女'},
    {'name': '王五', 'age': 40, 'sex': '男'}
]
print(persons)

print(persons[1]['name'])

找出person中年齡最大的人的名字

max_age = 0
for index in persons:
    if index['age'] > max_age:
        max_age = index['age']
        name = index['name']
print('年齡最大的是:', name, max_age)

2.字典中有列表

寫一個程序,保存一個班級的信息逾雄,包含班級阀溶,位置,所有學(xué)生(學(xué)生中需要保存名字鸦泳、年齡和學(xué)校)

my_class = {
    'class_name': 'python1807',
    'location': '18-6',
    'all_student': [
        {'name': '小華', 'age': 18, 'school': '清華'},
        {'name': '小明', 'age': 20, 'school': '北大'},
        {'name': '小紅', 'age': 20, 'school': '川大'}
    ]
}
print(my_class['all_student'][0]['school'])

練習(xí):在班級中添加一個學(xué)生银锻,姓名:老王,年齡:40做鹰,學(xué)校:北大青鳥

print('___________________')
print('添加信息')
name = input('姓名:')
age = int(input('年齡:'))
school = input('學(xué)校:')
new_student['name'] = name
new_student['age'] = age
new_student['school'] = school
new_student = {'name': name, 'age': age, 'school': school}
print(new_student)
my_class['all_student'].append(new_student)
print(my_class['all_student'])

2.練習(xí):刪除班級中年齡小于20歲的學(xué)生

for index in my_class['all_student']:
     if index['age'] < 20:
         my_class['all_student'].remove(index)
print(my_class['all_student'])

all_student = my_class['all_student']
for student in all_student[:]:
    if student['age'] < 20:
        all_student.remove(student)
print(my_class)
index = 0
while index < len(all_student)
    student = all_student
    if student['age'] < 20:
        del all_student[index]
        continue
    index += 1
print(my_class)

函數(shù)的聲明

函數(shù)就是對實現(xiàn)某一特定功能代碼段的封裝
分類:自定義函數(shù)(程序員自己聲明實現(xiàn)其功能)和內(nèi)置函數(shù)(系統(tǒng)已經(jīng)聲明實現(xiàn)完成)

1.聲明函數(shù)語法

def 函數(shù)名(參數(shù)列表):
    函數(shù)體

說明:
a.def --> python中聲明函數(shù)的關(guān)鍵字
b.函數(shù)名 --> 標(biāo)識符击纬,不能是關(guān)鍵字。遵守PEP8命名規(guī)范(所有字母小寫钾麸,多個單詞用下劃線隔開)
見名知義(看見名字知道函數(shù)的功能)
c.() --> 固定格式
d.參數(shù)列表 --> 形參列表更振,參數(shù)名1炕桨,參數(shù)2,...
可以有多個參數(shù)肯腕,也可以沒有
參數(shù)是用來從函數(shù)的外部給函數(shù)里面?zhèn)髦涤玫?br> e. : --> 固定格式
f.函數(shù)體 --> 就是實現(xiàn)函數(shù)功能的代碼段

2.初學(xué)者聲明函數(shù)的步驟
a.確定函數(shù)的功能
b.根據(jù)功能確定函數(shù)名
c.確定參數(shù):確定有沒有献宫,確定有幾個(看實現(xiàn)函數(shù)的功能需不需要從函數(shù)外面?zhèn)髦担枰獋鲙讉€)
d.實現(xiàn)功能函數(shù)
e.確定返回值

3.函數(shù)的調(diào)用
聲明函數(shù)的時候实撒,不會執(zhí)行函數(shù)體遵蚜。函數(shù)只有在函數(shù)調(diào)用的時候才會執(zhí)行

語法:

函數(shù)名(實參列表)

說明:
函數(shù)名 --> 必須是已經(jīng)聲明過的函數(shù)
() --> 固定的
實參列表 --> 數(shù)據(jù)1 ,數(shù)據(jù)2...
用來給形參賦值

寫一個函數(shù)奈惑,打印兩個數(shù)的和

def my_sum(num1, num2):
    print(num1 + num2)

寫一個函數(shù),打印五個'*'

def print_star():
    print('*' * 5)

寫一個函數(shù)睡汹,打印n個'*'

def print_star2(n):
    print('*' * n)

練習(xí):寫一個函數(shù)肴甸,計算1+2+...+n的和

def my_sum2(n):
    sum1 = 0
    for index in range(n + 1):
        sum1 += index
    print('1+2+...+', index, '=', sum1)


my_sum2(100)


函數(shù)的調(diào)用

1.格式

函數(shù)名(實參列表)

2.函數(shù)的調(diào)用過程(重點)

第一步:回到函數(shù)聲明的位置
第二步:用實參給形參賦值(傳參:一定要保證每個參數(shù)都有值)
第三步:執(zhí)行函數(shù)體
第四步:返回值 --> 返回給函數(shù)調(diào)用表達(dá)式
第五步:執(zhí)行完函數(shù)體回到函數(shù)調(diào)用的位置,接著執(zhí)行后面的代碼



def sum2(num1, num2):
    print(num1 + num2)


sum2(10, 20)

函數(shù)的參數(shù)

1.位置參數(shù)和關(guān)鍵字參數(shù)

位置參數(shù):按照參數(shù)的順序一一給形參賦值
關(guān)鍵字參數(shù):按照關(guān)鍵字一一給形參賦值



def fun1(a, b, c):
    print('a', a, 'b', b, 'c', c)

# 位置參數(shù)
fun1(10, 20, 30)
# 關(guān)鍵字傳參
fun1(c=300, b=200, a=100)

2.默認(rèn)參數(shù)

**函數(shù)聲明的時候可以給參數(shù)設(shè)置默認(rèn)值囚巴,但是有默認(rèn)值的參數(shù)原在,必須放在參數(shù)列表的最后

有默認(rèn)值的參數(shù),在調(diào)用的時候可以不用傳參**



def fun2(a, c, b=0):
    print('a:', a, 'b:', b, 'c:', c)


fun2(10, 20)
fun2(100, 200, 300)


def fun3(a=10, c=20, b=0):
    print('a:', a, 'b:', b, 'c:', c)


fun3(a=100, b=200)
fun3(100, b=200)

3.不定長參數(shù)

*參數(shù)的個數(shù)不確定的時候彤叉,可以在形參的前面加庶柿,將這個形參變成一個元組,用來接收多個參數(shù)

注意:如果函數(shù)有多個參數(shù)秽浇,那么不定長參數(shù)要放在最后**

寫一個函數(shù)浮庐,計算多個數(shù)的和

def my_sum(*nums):
    print(sum(nums))


my_sum()
my_sum(1)
my_sum(1, 2)


def fun4(name, age, *scores):
    print(name, age, scores)


fun4('小花', 20, 98, 99, 85)

函數(shù)的返回值

函數(shù)的返回值就是函數(shù)調(diào)用表達(dá)式的值,就是return關(guān)鍵字后面的表達(dá)式的值柬焕。

python中所有的函數(shù)都有返回值审残,返回值的默認(rèn)值是None

執(zhí)行函數(shù)體沒有遇到return,函數(shù)的返回值就是None斑举;函數(shù)的返回值是return后面的值

函數(shù)調(diào)用表達(dá)式 --> 調(diào)用函數(shù)的語句(函數(shù)名(實參))
return --> 關(guān)鍵字搅轿,只能寫在函數(shù)體中。用來返回返回值和結(jié)束函數(shù)

注意:看一個函數(shù)的返回值富玷,只看有沒有遇到return璧坟。只要沒有遇到return就是None,遇到return就是return后面的值

情況一:沒有return


def fun1():
    print('hello python!')

# 將返回值賦給一個變量
re = fun1()
print(re)

# 直接打印返回值
print(fun1())

# 將返回值作為列表的元素
list1 = [fun1(), 1]
print(list1)

情況二:有return

執(zhí)行函數(shù)的時候赎懦,一旦遇到return雀鹃,函數(shù)就直接結(jié)束。并且把return后面的結(jié)果作為返回值



def func2():
    print('_________')
    print('++++++++')
    print('***********')
    return 100
    print('11111111')


re = func2()
print(re)

注意:并不是只要函數(shù)中有return铲敛,函數(shù)的返回值就是return后面的值


def func3(n):
    if n % 2:
        return '是奇數(shù)'


print(func3(4))
print(func3(5))

如果實現(xiàn)函數(shù)的功能會產(chǎn)生新的數(shù)據(jù)褐澎,就將新的數(shù)據(jù)返回。如果不會產(chǎn)生新的數(shù)據(jù)就不用返回值

寫一個函數(shù)伐蒋,功能是計算一個數(shù)的階乘

def jie_cheng(num):
    sum1 =1
    for x in range(1, num + 1):
        sum1 *= x

    return sum1


re = jie_cheng(10)
print(re)


# 寫一個函數(shù)工三,打印問候語:‘吃飯了嗎迁酸?’
def say_hello():
    print('吃飯了嗎?')

作業(yè)

  1. 編寫一個函數(shù)俭正,求1+2+3+...+N
def my_sum(n):
    sum1 = 0
    for x in range(1, n+1):
        sum1 += x
    return sum1


num = int(input('請輸入結(jié)束的數(shù):'))
print('1 + 2 + ... + ', num, '=', my_sum(num))

結(jié)果


1.JPG
  1. 編寫一個函數(shù)奸鬓,求多個數(shù)中的最大值
def my_max(n):
    return max(n)


list1 = [15, 565, 64, 56, -23]
print(list1)
print('最大的數(shù)是:', my_max(list1))

結(jié)果


2.JPG
  1. 編寫一個函數(shù),實現(xiàn)搖骰子的功能掸读,打印n個骰子的點數(shù)和
def sum_shaizi(n):
    sum1 = 0
    for index in range(n):
        num = random.randint(1, 6)
        print('第', index + 1, '顆點數(shù):', num)
        sum1 += num
    return sum1


num_shaizi = int(input('輸入骰子的個數(shù):'))
print('點數(shù)和:', sum_shaizi(num_shaizi))

結(jié)果


3.JPG
  1. 編寫一個函數(shù)串远,交換指定字典的key和value。
    如:{'a':1, 'b':2, 'c':3} ---> {1:'a', 2:'b', 3:'c'}
def change_key_value(n):
    for index in list(n):
        key = index
        value = n[index]
        del n[index]
        n[value] = key
    return n


dict1 = {'a': 1, 'b': 2, 'c': 3}
print(change_key_value(dict1))

結(jié)果


4.JPG
  1. 編寫一個函數(shù)儿惫,提取指定字符串中的所有的字母澡罚,然后拼接在一起后打印出來
    如:'12a&bc12d--' ---> 打印'abcd'
def abc(n):
    str1 = ''
    for word in n:
        if word.isalpha():
            str1 += word
    return str1


str2 = input('輸入一個字符串:')
print(abc(str2))

結(jié)果


5.JPG
  1. 寫一個函數(shù),求多個數(shù)的平均值
def aver(*nums):
    num_ave = 0
    count = 0
    sum1 = 0
    for num in nums:
        for index in num:
            sum1 += index
            count += 1
    print(num, '的平均數(shù)是:', end='')
    return sum1 / count


list2 = [545, 4, 45, 95, 56]
print(aver(list2))

結(jié)果


6.JPG
  1. 寫一個函數(shù)肾请,默認(rèn)求10的階層留搔,也可以求其他數(shù)的階層
def jie_cheng(n=10):
    num1 = 1
    for x in range(1, n + 1):
        num1 *= x
    return num1


print(jie_cheng())
print(jie_cheng(5))

結(jié)果


7.JPG
  1. 寫一個函數(shù),可以對多個數(shù)進(jìn)行不同的運算
    如: operation('+', 1, 2, 3) ---> 求 1+2+3的結(jié)果 operation('-', 10, 9) ---> 求 10-9的結(jié)果 operation('', 2, 4, 8, 10) ---> 求 24810的結(jié)構(gòu)
def operation(flag, *nums):
    num1 = 1
    if flag == '+':
        for num in nums:
            print(num)
            return sum(num)
    elif flag == '-':
        count = 1
        for num in nums:
            print(num)
            for x in num:
                while count == 1:
                    num1 = x
                    count += 1
                num1 -= x
            return num1
    elif flag == '*':
        for num in nums:
            print(num)
            for x in num:
                num1 *= x
        return num1
    elif flag == '/':
        count = 1
        for num in nums:
            print(num)
            for x in num:
                num1 /= x
        return num1
    else:
        print('輸入的運算符有誤')


list1 = [10, 3, 5, 7, 9]
flag = input('輸入要進(jìn)行的運算(+铛铁,-隔显,*,/):')
print(operation(flag, list1))

結(jié)果


8.JPG
9.JPG
10.JPG
11.JPG

9.寫一個函數(shù)饵逐,求指定列表中括眠,指定的元素的個數(shù)

def sum1(list2, ele):
    count = 0
    print(list2)
    print(ele, '的個數(shù):', end='')
    for index in list2:
        if str(index) == ele:
            count += 1
    return count


list1 = [1, 1, 2, 2, 2, 'a', 'a', 'abc']
ele1 = str(input('下列列表中,輸入要統(tǒng)計的元素:'))
print(sum1(list1, ele1))

結(jié)果


12.JPG

10.寫一個函數(shù)倍权,獲取指定列表中指定元素對應(yīng)的下標(biāo)(如果有多個掷豺,一起返回)

def xia_biao(list2, ele):
    xiabiao  = 0
    while xiabiao <= len(list2) - 1:
        for index in list2:
            if str(index) == ele:
                print(xiabiao)
                xiabiao += 1
            else:
                xiabiao += 1


list1 = [1, 1, 2, 2, 2, 'a', 'a', 'abc']
print(list1)
ele1 = str(input('該列表中,輸入要獲取下標(biāo)的元素:'))
xia_biao(list1, ele1)

結(jié)果


13.JPG
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薄声,一起剝皮案震驚了整個濱河市萌业,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奸柬,老刑警劉巖生年,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異廓奕,居然都是意外死亡抱婉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門桌粉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒸绩,“玉大人,你說我怎么就攤上這事铃肯』家冢” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長步藕。 經(jīng)常有香客問我惦界,道長,這世上最難降的妖魔是什么咙冗? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任沾歪,我火速辦了婚禮,結(jié)果婚禮上雾消,老公的妹妹穿的比我還像新娘灾搏。我一直安慰自己,他們只是感情好立润,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布狂窑。 她就那樣靜靜地躺著,像睡著了一般桑腮。 火紅的嫁衣襯著肌膚如雪蕾域。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天到旦,我揣著相機(jī)與錄音,去河邊找鬼巨缘。 笑死添忘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的若锁。 我是一名探鬼主播搁骑,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼又固!你這毒婦竟也來了仲器?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤仰冠,失蹤者是張志新(化名)和其女友劉穎乏冀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洋只,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡辆沦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了识虚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肢扯。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖担锤,靈堂內(nèi)的尸體忽然破棺而出蔚晨,到底是詐尸還是另有隱情,我是刑警寧澤肛循,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布铭腕,位于F島的核電站银择,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谨履。R本人自食惡果不足惜欢摄,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望笋粟。 院中可真熱鬧怀挠,春花似錦、人聲如沸害捕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尝盼。三九已至吞滞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盾沫,已是汗流浹背裁赠。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留赴精,地道東北人佩捞。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蕾哟,于是被迫代替她去往敵國和親一忱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容