admin管理员组

文章数量:1794759

Python 自学笔记(教程)(八)

Python 自学笔记(教程)(八)

Python 自学笔记(教程)(八)
  • 定义函数
  • 调用函数
  • return 语句
  • 变量作用域
  • 传送门
    • 课程

定义函数 函数名(参数1, 参数2, ... , 参数n): 函数体 return 语句 #函数名:最好是取体现函数功能的名字,一般用小写字母和单下划线、数字等组合 def greet(name): #参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同 #规范:括号是英文括号,后面的冒号不能丢 print(name + '早上好') #函数体:函数体就是体现函数功能的语句,要缩进,一般是四个空格 return 调用函数 函数名(参数) def greet(name): print(name + '早上好') return # 开始调用 greet('Python')

屏幕打印:

Python早上好

def pika1(): print('我最喜爱的神奇宝贝是皮卡丘') #该函数没有参数,直接调用函数名。记得英文括号一定不能少 pika1() def pika2(name): print('我最喜爱的神奇宝贝是'+name) #需要给参数name赋值,每次调用都可以给参数赋不同的值 pika2('皮卡丘') pika2('喷火龙') def pika3(name,person): print('我最喜爱的神奇宝贝是'+name) print('我最喜爱的驯兽师是'+person) #需要给两个参数分别赋值,并用逗号隔开,否则会报错 pika3('皮卡丘', '小智')

屏幕打印:

我最喜爱的神奇宝贝是皮卡丘 我最喜爱的神奇宝贝是皮卡丘 我最喜爱的神奇宝贝是喷火龙 我最喜爱的神奇宝贝是皮卡丘 我最喜爱的驯兽师是小智

注意对应代码观察每一个输出 我们可以发现,当一个函数有多个参数时,调用时输入的参数是自动一一对应放入函数体的,就比如

def menu(appetizer, course): print('一份开胃菜:' + appetizer) print('一份主食:' + course) menu('牛肉拉面', '话梅花生') menu('话梅花生', '牛肉拉面')

屏幕打印:

一份开胃菜:牛肉拉面 一份主食:话梅花生 一份开胃菜:话梅花生 一份主食:牛肉拉面

但是我们在调用函数的时候也可以将参数位置自定义,比如:

def menu(appetizer, course): print('一份开胃菜:' + appetizer) print('一份主食:' + course) #如果采用下面这种形式传递,就不需要理会参数位置 menu(course = '牛肉拉面', appetizer = '话梅花生')

屏幕打印:

一份开胃菜:话梅花生 一份主食:牛肉拉面

同时我们在定义函数的时候还可以设置默认参数,在调用有默认参数的函数时可以不再输入默认参数,比如

def menu(appetizer, course, dessert = '绿豆沙'): print('一份开胃菜:' + appetizer) print('一份主食:' + course) print('一份甜品:' + dessert) menu('话梅花生', '牛肉拉面') #因为已经默认将'绿豆沙'传递给dessert,调用时无须再传递。

屏幕打印:

一份开胃菜:话梅花生 一份主食:牛肉拉面 一份甜品:绿豆沙

虽然默认参数已经设置好了,但是也是可以改变的,比如:

def menu(appetizer, course, dessert = '绿豆沙'): print('一份开胃菜:' + appetizer) print('一份主食:' + course) print('一份甜品:' + dessert) menu('话梅花生', '牛肉拉面') menu('话梅花生', '牛肉拉面', '银耳羹') #银耳羹对应参数dessert

屏幕打印:

一份开胃菜:话梅花生 一份主食:牛肉拉面 一份甜品:银耳羹

接下来介绍不定长参数,在定义函数时,需要在参数名前加一个*,使用方法及效果如下:

def menu(*barbeque): print(barbeque) menu('烤鸡翅', '烤茄子', '烤玉米') #这几个值都会传递给参数barbeque

屏幕打印:

(‘烤鸡翅’, ‘烤茄子’, ‘烤玉米’)

注意:(‘烤鸡翅’, ‘烤茄子’, ‘烤玉米’)这其实也是一种数据类型,叫做元组,元组的写法是把数据放在小括号()中,它的用法和列表用法类似,主要区别在于列表中的元素可以随时修改,但元组中的元素不可更改

我们也可以先设置一个元组,再传入参数,比如

order = ('烤鸡翅', '烤茄子', '烤玉米') #元组的长度没有限制 def menu(*barbeque): print(barbeque) menu(*order)

屏幕打印:

(‘烤鸡翅’, ‘烤茄子’, ‘烤玉米’)

遍历元组:

def menu(appetizer, course, *barbeque, dessert = '绿豆沙'): print('一份开胃菜:' + appetizer) print('一份主菜:' + course) print('一份甜品:' + dessert) for i in barbeque: print('一份烤串:' + i) menu('话梅花生', '牛肉拉面', '烤鸡翅', '烤茄子', '烤玉米')

屏幕打印:

一份开胃菜:话梅花生 一份主食:牛肉拉面 一份甜品:绿豆沙 一份烤串:烤鸡翅 一份烤串:烤茄子 一份烤串:烤玉米

**注意:**这时候默认参数也需要放在不定长参数的后面,即dessert = '绿豆沙'要放在*barbeque后面,否则传递的值会对应不上

return 语句

return是返回值,当你输入参数给函数,函数就会返回一个值,每个函数都会有返回值,函数内部一旦遇到return语句,就会停止执行并返回结果,没有return语句的函数,Python也会在末尾隐性地加上return None,即返回None值(return None可以简写为return)

#第一个函数 def fun(): a = 'I am coding' print(fun()) #第二个函数 def fun(): a = 'I am coding' return a print(fun())

屏幕打印:

None I am coding

def niduoda(age): if age < 12: return '哈,是祖国的花朵啊' elif age < 25: return '哇,是小鲜肉呢' else: return '嗯,人生才刚刚开始' print(niduoda(30))

屏幕打印:

嗯,人生才刚刚开始

函数返回的参数可以直接打印输出,也可以继续使用,也可以传入另外一个函数中,同时函数不止可以返回一个值,还可以返回多个值,比如:

def lover(name1, name2): face = name1 + '的脸蛋' body = name2 + '的身材' return face, body a = lover('李若彤', '林志玲') print('我的梦中情人:' + a[0] + ' + ' + a[1])

屏幕打印:

我的梦中情人:李若彤的脸蛋 + 林志玲的身材

我们来理解一下最后一行代码,首先看一下依次返回的两个参数是什么数据类型:

def lover(name1, name2): face = name1 + '的脸蛋' body = name2 + '的身材' return face, body a = lover('李若彤', '林志玲') #此时return的值为元组 a = ('李若彤的脸蛋', '林志玲的身材')

屏幕打印:

(‘李若彤的脸蛋’, ‘林志玲的身材’)

很明显这是一个元组,事实上,Python语言中的函数返回值可以是多个,而其他语言都不行,这是Python相比其他语言的简便和灵活之处,一次接受多个返回值的数据类型就是元组(tuple),而元组与列表其实都是数据的**“序列”**,元组取某个位置的值的操作,与列表是一模一样的

总结:

变量作用域
  • 在一个函数内定义的变量仅能在函数内部使用(局部作用域),它们被称作局部变量
  • 在所有函数之外赋值的变量,可以在程序的任何位置使用(全局作用域),它们叫全局变量
  • 比如:

    x=99 #全局变量x def num(): x = 88 #局部变量x print(x) num() #打印局部变量x print(x) #打印全局变量x

    屏幕打印:

    88 99

    虽然变量的名字相同(都是x),但因为全局变量和局部变量处在不同的“变量作用域”中,建议局部变量和全局变量不要取相同的名字

    **注意:**全局作用域中的代码中也不能使用任何局部变量,当变量处于被定义的函数内时,就是局部变量,只能在这个函数内被访问,当变量处于被定义的函数外时,就是全局变量,可以在程序中的任何位置被访问

    如果你非要将局部变量变成全局变量,要用到一种新的语句global语句,比如:

    def egg(): global quantity #global语句将变量quantity声明为全局变量 quantity = 108 egg() print(quantity)

    屏幕打印:

    108

    对比一下不同用法:

    def egg(): quantity = 108 egg() print(quantity) #会报错,不能在函数外部(全局作用域)使用函数内的局部变量 quantity = 108 def egg(): print(quantity) egg() #函数内的局部作用域,可以访问全局变量 def egg(): global quantity quantity = 108 egg() print(quantity) #global语句可以将局部变量声明为全局变量 传送门

    Python 自学笔记(教程)(一) Python 自学笔记(教程)(二) Python 自学笔记(教程)(三) Python 自学笔记(教程)(四) Python 自学笔记(教程)(五) Python 自学笔记(教程)(六) Python 自学笔记(教程)(七)

    课程

    我学习的课程

    本文标签: 笔记教程Python