【python系统学习12】函数

函数

函数是一堆组织好的、可重复利用的、用来实现某一功能的代码。

python中的input()、print()、type()、bool()、len()等都是函数。且是python的内置函数。

我们也可以封装自己的函数。

目录

作用

将常用的一段代码组织好封装到一个函数中重复利用
通过传入不同的参数、经过相同的计算,得到不同的结果。

可以将一个程序拆分成多个不同的函数,某些函数可以重复利用。在代码复用上看,极大的减少了代码的冗余量。

函数定义

我们来尝试定义自己独一无二的函数:

伪代码

形参是函数参数的变量。
函数参数可以有多个、不限量

def 函数名(形参1,形参2...):  函数体(要执行的内容)  return 返回值

示例代码

# 函数定义def summation(a,b):  return a + b

注意事项

一、定义:

def的意思是定义(define),用来声明定义一个函数。

二、函数名:

  1. summation是函数名,是自定义的变量。
  2. 名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合
  3. 不可与内置函数重名(内置函数不需要定义即可直接使用)

三、参数:

  1. 函数名后是英文的括号,括号内部定义参数变量。
  2. 括号里可以有多个参数,也可以不带参数。
  3. 参数的命名规则与函数名相同
  4. 括号后边是英文冒号

四、函数体:

  1. 冒号下边是缩进后的代码块,即是函数的函数体。
  2. 函数体是函数的执行过程,体现函数功能的语句,要缩进,一般是四个空格
  3. 函数体内部的代码是调用函数时才会被执行的代码。不调用不会执行

五、返回值:

  1. 函数体内部的return是用来返回值的。可以指定函数执行完毕后最终会返回什么值或表达式
  2. return语句:后面可以接多种数据类型,如果函数不需要返回值的话,可以省略
  3. 函数在执行过程中遇到第一个return语句就会停止执行,return后边的第二个return永远不会被执行。

函数调用

我们定义了函数后,想要使用这个函数就是调用函数。

比如我们常用的print()函数,我们传入参数后就能帮我们打印出参数部分的内容,这就是函数调用了。

伪代码

函数名+括号+可能的参数。

函数名(函数参数1,...更多参数)

示例代码

# 函数定义def summation(a,b):  return a + b

# 函数调用summation(1,2) 

函数调用后将得到函数内部的返回值。

函数参数

参数可以有多个,也可以没有。视参数功能的情况而定。

参数传递

在函数调用时在括号中传入的不同的值,这个值就是参数。

函数在接受到参数后,对其进行处理,并经过一定计算后返回不同的值。

如下,比如len()函数会根据括号里放的参数的不同,输出(返回)不同的值。

var1 = ‘这是第一个示例变量‘print(len(var1)) # 9,得到字符串的长度为9var2 = [‘小石头‘,‘xing.org1^‘,‘郭菊锋‘]print(len(var2)) # 3,得到数组的长度为3

上例中,len后边括号里的var1、var2就是参数传递。

参数接收

函数调用时将参数传递过去、则函数定义时,也要准备好接收的变量,那就是形参

def summation(a,b): # a,b就是对应接收的变量,是函数的形参。  return a + b # 接收数据后,在函数内部被运用。

summation(1,2) # 1,2就是传递参数

无参函数

有的函数其功能不需要参数,就没有参数预定和传递了。

def haha():  print(‘只打印一句话,不用参数。‘)

haha()

参数类型

位置参数

当有多个参数的时候,我们就必须按照顺序和数量传递,这也是最常见的参数类型。

如下案例:

def you(name,age,sex):  print(‘your name is:‘, name)  print(‘your age is:‘, age)  print(‘your sex is:‘, sex)

you(‘小石头‘,‘19‘,‘female‘)

# 打印结果如下:# your name is: 小石头# your age is: 19# your sex is: female

我们传递的三个参数必须和形参需要的内容一一对应,这就是位置参数

一旦不对应就搞笑了

you(‘female‘,‘小石头‘,‘19‘)

# 打印结果如下:# your name is: female# your age is: 小石头# your sex is: 19

默认参数

有时候我们有的参数多数情况下就用一个固定的值,有他的默认值。只有特殊情况下调用时才会需要不同的值,这时我们就可以定义默认参数。而不用每次都传递相同的参数了:

def newYou(name,age,sex=‘female‘): # sex=‘female‘就是默认参,参数的默认值是‘female‘。  print("your‘s name:", name)  print("your‘s age:", age)  print("your‘s sex:", sex)

# 当不传递第三个参数时,取默认值‘female‘newYou(‘小石头‘,‘10‘)# 打印结果:# your‘s name: 小石头# your‘s age: 10# your‘s sex: female

# 当传递了第三个参数时,取传递的参数male。newYou(‘大石头‘,‘29‘, ‘male‘) # 打印结果# your‘s name: 大石头# your‘s age: 29# your‘s sex: male

sex=‘female‘就是默认参,参数的默认值是‘female‘。
当不传参数时,第三个参数默认取值为‘female‘。当传递了第三个参数时,取传递的参数。

??需要注意的是:默认参数必须放在位置参数之后。

不定长度参数

顾名思义,就是传递给参数的数量是可选的、不确定的。

不定长参数可以接收任意数量的值。
它的格式比较特殊,是一个星号*加上参数名,它的返回值也比较特殊,

def noLen(*variables):    return variables

noLenResult = noLen(‘参数1‘,‘参数2‘,‘参数3‘)#括号里的这几个值都会传递给参数variables

print(noLenResult) # (‘参数1‘, ‘参数2‘, ‘参数3‘)print(type(noLenResult)) # <class ‘tuple‘>

<class ‘tuple‘>这种数据类型叫作元组(tuple)。见该篇章

在不定长参数后边还可以放默认参

def noLenDefault(*variables, defaultVar = 123):  print(variables)  print(defaultVar)  return variablesnoLenDefault(‘a‘,15,6)

# (‘a‘, 15, 6)# 123

函数返回值

定义返回值

函数一定要有返回值,返回值写在return后边

有返回值的案例:

def summation(a,b):  return a + b # return返回值、返回的是a+b的和。

result = summation(1,2) print(result) # 3。就是1+2的结果

没有返回值

如果没有明确写return 返回值,那么Python也会在末尾隐性地加上return None,那么函数默认就会返回None

没有返回值的案例:

def summation(a,b):  a + b   # 没有return返回值

result = summation(1,2) print(result) # Noneprint(type(result)) # <class ‘NoneType‘>

调用函数之后,得到的结果是None。且结果的数据类型是‘NoneType‘

返回多个值

用return语句来返回多个值。

要返回多个值,只需将返回的值写在return语句后面,用英文逗号隔开:

def returnmore(a,b,c):  return a,b,creturnResult = returnmore(1,3,4)print(returnResult)

# 返回结果# (1, 3, 4) 

可见返回结果也是元祖类型的

多个return

函数在执行过程中遇到第一个return语句就会停止执行,return后边的第二个return永远不会被执行。

def oneReturn():  return 1  print(‘这句不会执行‘)  return 2

oneResult = oneReturn()print(oneResult) # 1

可见,return返回值 不是2,而是1。这是因为第一个return后边的内容不会再执行了。包括print和return 2

作用域

程序中的变量并不是在哪个位置都可以被使用的,使用权限决定于这个变量是在哪里赋值的。

局部变量与全局变量

  1. 一个在函数内部赋值的变量仅能在该函数内部使用(局部作用域),它们被称作【局部变量】
  2. 在所有函数之外赋值的变量,可以在程序的任何位置使用(全局作用域),它们被称作【全局变量】
  3. 使用不在该函数作用域也不在全局作用域内的变量时,就会报错“变量名未定义”
quanjuVar = ‘我是全局变量‘def jubuFn1():  jubuVar1 = ‘我是局部变量1‘  print(quanjuVar,jubuVar1) # 我是全局变量 我是局部变量1

def jubuFn2():  jubuVar2 = ‘我是局部变量2‘  print(quanjuVar,jubuVar2) # 我是全局变量 我是局部变量2  print(jubuVar1) # 这段代码放开就会报错:NameError: name ‘jubuVar1‘ is not defined

jubuFn1()jubuFn2()

将局部变量全局化

怎么解决“局部变量”和”全局变量“之间的矛盾,实现函数间变量的相互传递呢?

  1. 把局部变量都放在函数外,变成全局变量。
  2. 使用global语句将局部变量声明为全局变量
  3. 函数嵌套
# 局部变量全局化quanjuVar2 = ‘我是全局变量2‘jubuVar3 = ‘局部变量全局化,第一种方法‘def jubuFn3():  # 在顶部将其全局化  global jubuVar4  jubuVar1 = ‘我是局部变量1‘  # 在下边赋值全局化后的局部变量  jubuVar4 = ‘我是局部变量4,我被global全局化了‘  print(quanjuVar,jubuVar1,jubuVar3) # 我是全局变量 我是局部变量1 局部变量全局化,第一种方法

def jubuFn4():  jubuVar2 = ‘我是局部变量222‘  print(quanjuVar,jubuVar2) # 我是全局变量 我是局部变量222  print(jubuVar3) # 局部变量全局化,第一种方法  print(jubuVar4) # 这段代码这次就能正常执行了,因为jubuVar4这个变量被全局化了。打印:我是局部变量4,我被global全局化了

jubuFn3()jubuFn4()

global语句一般写在函数体的第一行,它会告诉Python,“我希望jubuVar4是个全局变量,所以请不要用这个名字创建一个局部变量”。

所以jubuFn4()函数内部现在可以直接使用声明后的全局变量jubuVar4。

函数嵌套

函数嵌套也可以实现函数间变量的相互传递

# 函数嵌套quanjuVar3 = ‘我是全局变量3‘def jubuFn5():  jubuVar5 = ‘我是局部变量5‘  print(quanjuVar,jubuVar5) # 我是全局变量 我是局部变量5  def jubuFn6():    jubuVar6 = ‘我是局部变量666‘    print(quanjuVar3,jubuVar6) # 我是全局变量3 我是局部变量666    print(jubuVar5) # 我是局部变量5 (因为嵌套,内部的函数可以用全局的变量、也可以用父级函数内部的变量)  jubuFn6()

jubuFn5()

以上是函数定义的嵌套。

下边还有函数调用的嵌套

# 函数调用的嵌套def one(a):  return a

def two(a,b):  return one(a) + b

andResult = two(1,2)print(andResult) # 3

在函数two中,调用了one函数之后的结果,与b参数相加后再return出去

练习题

仿写len()函数

实现具有相同功能的函数
思路:

  1. 设置一个初始为0的计数器;
  2. 遍历字符串,每遍历一次,计数器加一;
  3. 返回计数器的值。

源代码

本文使用 mdnice 排版

原文地址:https://www.cnblogs.com/padding1015/p/12642060.html

时间: 2024-11-08 10:31:20

【python系统学习12】函数的相关文章

python基础学习12(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #python class #面向对象编程oop思想,3个特性:封装.继承.多态,在其他方面的功能,比如重载,模拟等,也可以自定义自己需要的类 #在python中,面向对象主要2个:类和类实例 #类与实例 #类与实例有关

【python系统学习07】一张图看懂字典并学会操作

点击跳转 - 原文地址 数据类型 - 字典(dict) 目录: [python系统学习07]一张图看懂字典并学会操作 原文地址:https://www.cnblogs.com/padding1015/p/12232571.html

【Python系统学习01】print函数的用法

原网页和源代码地址 print函数的用法 print - Python中打印信息的函数,可以打印代码运行结果,帮助我们了解代码执行状态. 注意??:在python代码书写过程中,一定要切换成英文输入状态,保证print()函数的括号是用[英文括号],并且其他默认所有正确的语法,包括标点符号都是[英文].不小心用了中文标点的话,计算机会无法识别,然后报错syntaxError:invalid syntax(语法错误:无效语法). 一.主要功能: 打印内容. 打印的意思是:让计算机把你给它的指令结果

【python系统学习05】input函数——实现人机交互

input函数 目录 input用途 语法 示例 参数 返回值 返回值数据类型转换 容错处理 动手吧 input用途 实现人机交互: 1.你提出问题打印在屏幕上, 2.运行程序的人再输入回答. 3.按下回车,程序得到收集来的回答 4.之后,逻辑向下继续运行. 我们写的程可以实现根据他输入的回答进行不同的逻辑走向. 语法 示例 result = input('你爱我吗?请输入:') if result == '不': print('哼!你个大猪蹄子!') else: print('me too!!

python系统学习:第三周之嵌套函数

# 这个例子说明如果函数中没有直接定义某变量,则他会向父级寻找,优先级:自己-父级-爷爷级···name = "niu"def guess(): print(">>NO.1", name)guess() # 输出"niu" # 嵌套函数(函数当中包含函数)name2 = "shi"def guess2(): name2 = "chong" print(">>NO.2.1&q

python系统学习:第四周之Map/Reduce/Sored高级函数

# 高阶函数:map/reduce/filter/sort# map()函数接收两个参数:函数名.iterable# 例如计算[1,2,3,4,5] 的平方根# 老办法:lists = []def new(x): for i in x: lists.append(i * i) return (lists) print(new([1, 2, 3, 4, 5]))# map()方法def new2(x): return x*x print(list(map(new2,[1,2,3,4,5]))) #

Python 系统学习梳理_【All】

Python学习 1. Python学习---Python安装与基础1205 2. Python学习---PyCharm的使用学习 3. Python学习---Python数据类型1206 4. Python学习---range/for/break/continue简单使用 5. Python学习---列表/元组/字典/字符串/set集合/深浅拷贝1207[all] 6. Python学习---文件操作的学习1208 7. Python学习---函数的学习1209[all] 8. Python学

【Python系统学习02】数据类型与类型转换

一.数据类型 字符串 整数 浮点数 [补充中...] 1.字符串 str 字符串:英文string,简写str. name = '小石头:' print(name,'2019', '12', '24') # 小石头: 2019 12 24 print("平安夜,祝你一生平安.Merry Christmas!") # 平安夜,祝你一生平安.Merry Christmas! 以上,包裹在单引号和双引号里边的内容,如'小石头'.'2019'这些就是字符串. 换言之,但凡包裹在英文格式下的 单

【python系统学习04】条件判断语句

if,elif,else 条件判断语句 写法 number = 1 if number=='1': # 这里注意英文冒号 print('1') # 这里注意缩进 elif number=='2': # 表达式没有小括号包裹 print('2-1') print('2-2') print('2-3') elif number=='3': print('3') else: print('heihei') 学过 js 的你,看到这个肯定小 case 吧!肯定第一时间得到答案,打印出"1"吧!