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),而元组与列表其实都是数据的**“序列”**,元组取某个位置的值的操作,与列表是一模一样的

总结:
Python 自学笔记(教程)(八)_第1张图片

变量作用域

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

比如:

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,基础语法系列)