1、元祖

元组:Python的元祖与列表类似,不同之处在于元祖不能修改,元祖使用小括号,列表使用方括号。

#列表
>>> num = ['laoli','laowang','laozhang']
>>> 
>>> num.append('laoji')
>>> 
>>> num
['laoli', 'laowang', 'laozhang', 'laoji']
>>> num[1] = 'laotian'
>>> 
>>> num
['laoli', 'laotian', 'laozhang', 'laoji']
>>> 

#元组 
>>> num1 = ('laoli','laowang','laozhang')
>>> 
>>> num1[1] = 'laoji'
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    num1[1] = 'laoji'
TypeError: 'tuple' object does not support item assignment
>>> num1.append('laotian')
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    num1.append('laotian')
AttributeError: 'tuple' object has no attribute 'append'
>>>

 2、定义函数

定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

命令: def 函数名():

def print_fozu():
    print("                            _ooOoo_  ")
    print("                           o8888888o  ")
    print("                           88  .  88  ")
    print("                           (| -_- |)  ")
    print("                            O\\ = /O  ")
    print("                        ____/`---'\\____  ")
    print("                      .   ' \\| |// `.  ")
    print("                       / \\||| : |||// \\  ")
    print("                     / _||||| -:- |||||- \\  ")
    print("                       | | \\\\\\ - /// | |  ")
    print("                     | \\_| ''\\---/'' | |  ")
    print("                      \\ .-\\__ `-` ___/-. /  ")
    print("                   ___`. .' /--.--\\ `. . __  ")
    print("                ."" '< `.___\\_<|>_/___.' >'"".  ")
    print("               | | : `- \\`.;`\\ _ /`;.`/ - ` : | |  ")
    print("                 \\ \\ `-. \\_ __\\ /__ _/ .-` / /  ")
    print("         ======`-.____`-.___\\_____/___.-`____.-'======  ")
    print("                            `=---='  ")
    print("  ")
    print("         .............................................  ")
    print("                  佛祖镇楼                  BUG辟易  ")
    print("          佛曰:  ")
    print("                  写字楼里写字间,写字间里程序员;  ")
    print("                  程序人员写程序,又拿程序换酒钱。  ")
    print("                  酒醒只在网上坐,酒醉还来网下眠;  ")
    print("                  酒醉酒醒日复日,网上网下年复年。  ")
    print("                  但愿老死电脑间,不愿鞠躬老板前;  ")
    print("                  奔驰宝马贵者趣,公交自行程序员。  ")
    print("                  别人笑我忒疯癫,我笑自己命太贱;  ")
    print("                  不见满街漂亮妹,哪个归得程序员?")

3、定义、调用函数

def print_menu():   #定义一个函数
    print("今天天气好吗?")
    print("不怎么好")
    print("是天气不好还是你的心情不好")
    print("我的心情就是我的天气")
    print("好吧~")

print_menu()   #用这个来调用函数

#执行顺序: def print_menu(): -> print的内容不执行,继续往下, - >  print_menu()  - >  打印print内容 -> 打印完成之后返回 print_menu()继续往下执行

4、4种函数

def 函数名():
    pass         #没有参数没有返回值


def 函数名():
    return xxx   #没有参数有返回值


def 函数名(参数):
    pass         #有参数没有返回值


def 函数名(参数):
    return xxx   #有参数有返回值

 5、带有参数的函数

#定义函数
def num_num1(a,b):   #a,b存储 num1 , num2的值,变量名a,b可以随便设置。意味着你这两个变量的目的,就是当(num1,num2)去调用函数的时候(a,b)来接收
    result = a + b
    print('%d+%d=%d'%(a,b,result))

num1 = int(input("请输入第一个数字:"))
num2 = int(input("请输入第二个数字:"))

#调用函数
num_num1(num1,num2)  #当我去调用函数的时候,顺便把这个两个值给他

6、return的作用

#定义一个函数,打印出现在的温度
def get_wendu():
    wendu = 22
    print("现在的温度是:%d"%(wendu))

get_wendu()

#如果我们同时也想打印出华氏温度,该如何打印,假设,假设华氏温度比温度高2度,那我们该如何写


def get_wendu():
    wendu = 22
    print("现在的温度是:%d"%(wendu))

def get_huashi_wendu():
    wendu = wendu + 2
    print("华氏温度是:%d"%(wendu))

get_wendu()
get_huashi_wendu()

#加入我们按照以上的代码写,会不会出错?结果是肯定的,我们定义get_huashi_wendu的函数内wendu的变量是查找不到的,我们用什么方法来让函数内的温度能获取到上一个函数内的wendu变量呢?


def get_wendu():
    wendu = 22
    print("现在的温度是:%d"%(wendu))
    return wendu   #把结果返回到调用,也就是返回到result = get_wendu()

def get_huashi_wendu(wendu):  #(wendu)接收result的值
    wendu = wendu + 2
    print("华氏温度是:%d"%(wendu))

result = get_wendu()
get_huashi_wendu(result)  #把当前变量的值当作一个参数传进get_huashi_wendu里面

来做个小游戏

  1:根据用户的输入,打印电影、电视剧、综艺排行榜(内容自己定义)

  2:使用return来进行结果调用

#排行榜内容都是自己定义,不代表实际数据

def print_in():
    print("="*10)
    print("1:查看电影列表")
    print("2:查看电视剧列表")
    print("3:查看综艺排行榜")
    print("="*10)
    name_input = int(input("请输入序号查看信息:"))
    return name_input

def print_dianying(name_input):
 
    if name_input == 1:
        print("-----电影排行榜-----")
        print("Top1:羞羞的铁拳")
        print("Top2:芳华")
        print("Top3:奇门遁甲")
    elif name_input == 2:
        print('-----电视剧排行榜-----')
        print("Top1:猎场")
        print("Top2:我们的少年时代")
    elif name_input == 3:
        print('-----综艺排行榜-----')
        print("Top1:爸爸去哪儿5")
        print("Top2:亲爱的客栈")
        
name_input = print_in()
print_dianying(name_input)

 7、函数中的多个return

之前我们演示了return调用函数内的值,那在这个函数里面只有一个return,但是如果我们有多个return该如何处理?

def test():
    a = 11
    b = 22
    c = 33
    return a
    return b
    return c
num = test()
print(num)

#这样写会打印出什么?只会打印出11,那我们再多写几个print

def test():
    a = 11
    b = 22
    c = 33
    return a
    return b
    return c
num = test()
print(num)
num = test()
print(num)

#看看这样能不能把22,打印出来?结果是否定的,打印两边11

我们用之前学过的列表、元祖、字典等的方式来看看行不行

#这样是不是就是打印出来了。还有没有其他办法
def test():
    a = 11
    b = 22
    c = 33

    d = [a,b,c]
    return d
    #return b
    #return c
num = test()
print(num)

#我们用元组试试,这样是不是也可以
def test():
    a = 11
    b = 22
    c = 33

    d = (a,b,c)
    return d
    #return b
    #return c
num = test()
print(num)

#还有没有其他办法?,这样是不是也可以
def test():
    a = 11
    b = 22
    c = 33

    return a,b,c
    #return b
    #return c
num = test()
print(num)

8、函数的嵌套调用

 什么是函数嵌套调用:在一个函数被调用的过程里面又调用一个函数

#w我们可以定义很多函数,但是你调用谁是你的问题,其他没有调用的函数,程序也不会报错
def test1():
    pass
def test2():
    pass
def test3():
    print("-----3-1---")
    print("-----3-2---")

test3()

我们接下来看函数嵌套调用

def test1():
    pass
def test2():
    print("-----2-1---")
    print("haha")
    print("-----2-2---")
def test3():
    print("-----3-1---")
    test2()
    print("-----3-2---")

test3()
    
#我们把test2嵌套在test3里面,然后test3调用test3函数的时候,顺便把test2函数给调用了出来,这就是嵌套调用

 9、函数的嵌套调用应用

我们用函数来打印一条线

def print_xian():
    print('-'*10)
print_xian()

如果现在有这样一个需求,再定义一个函数,打印五条这样的线出来,我们该如何操作

def print_xian():
    print('-'*10)

def print_5_xian():
    print('-'*10)
    print('-'*10)
    print('-'*10)
    print('-'*10)
    print('-'*10)
    
#print_xian()
print_5_xian()

我们有没有更好的办法来得到同样的结果?如果换做是代码的话,那可能就很麻烦了,所以有没有什么好的办法进行呢?

def print_xian():
    print('-'*10)

def print_5_xian():
    i = 0
    while i < 5:
        print_xian()
        i += 1
    

print_5_xian()

#这样是不是也能得到同样的结果呢,是不是比上一个方法要方便很多