代码编织梦想

一、函数的定义

  • 函数是组织好的,可以重复使用的,用来实现单一或者相关联功能的代码段,其实函数就是可以 实现某一功能的代码块,下次使用的时候直接调用就可以了
  • 函数能提高应用的模块性,和代码的重复利用率
  • python提供了很多内建函数,比如print(),但用户也可以自己创建函数,被叫做 自定义函数

1、定义一个函数

  • 定义一个函数的简单的规则:
    在python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后在缩进块中编写函数体,函数的返回值用return语句返回,不带表达式的return相当于返回None
  • 如果不主动调用函数的话,函数使不会执行的

在这里插入图片描述

2、参数传递

在 python 中,类型属于对象,变量是没有类型的,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。

2.1 可更改对象和不可更改对象

在 python 中,数字、字符串、元组是不可更改的对象,而 列表、字典、集合则是可以修改的对象。

  • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。

  • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

python 函数的参数传递:

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
# 可写函数说明
def changeme( mylist ):
   "修改传入的列表"
   mylist.append([1,2,3,4])
   print ("函数内取值: ", mylist)
   return
 
# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print ("函数外取值: ", mylist)
函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

二、参数

参数是用户向函数传递信息的媒介或者说形式;参数分为:形参,实参

1、形参

函数声明给出的括号内的 (目的:形参只是一个形式,让Python知道这个函数需要这要的参数,没有实际意义).

  • 形参就是形式上的参数,可以理解为数学的X,没有实际的值,通过别人赋值后才有意义。相当于变量。这里的‘a’就是形参。

在这里插入图片描述

2、实参

函数调用括号内出现的(具有特定意义的值,有实际值,实际含义)

  • 传入实参时,一定要加上引号,否则会报错。这里的tom、lily就是实参。
  • 实参又分为位置实参、关键字实参、

在这里插入图片描述

2.1 位置实参

调用函数时,必须将函数调用中的每个实参都关联到函数定义中的一个形参。关联方式是基于实参的顺序,这被称作位置实参.

  • 实参和形参的个数必须保持一致,最好按位置传参。
  • 如果位置不对应就要指定说明。

在这里插入图片描述

在这里插入图片描述

2.2 关键字实参

在调用函数过程中将形参与实参绑定在一起,这样不论位置怎样都能得到我们想要的结果

在这里插入图片描述

2.3 默认实参

  • 形参和实参可以不一致,如果不想使用默认的参数,在调用函数的时候可以指定
    在这里插入图片描述
    在这里插入图片描述

2.4 可变参数(不定长参数)

  • 可变参数允许传入0个或者任意个参数,这些可变参数在函数调用时候,自动组装为一个元组(tuple)

在这里插入图片描述
在这里插入图片描述

2.5 加* 和 ** 的参数

  • 加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。声明函数时,参数中星号 * 可以单独出现,星号 * 后的参数必须用关键字传入。
  • 加了两个星号 ** 的参数会以字典的形式导入。

一个星号
在这里插入图片描述
在这里插入图片描述
如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:
在这里插入图片描述
星号*单独出现,星号 * 后的参数必须用关键字传入:

def f(a,*,b):
    return a * b

print(f(1,b=2))

__________

2

两个星号

在这里插入图片描述

三、函数的返回值return

  • 返回值:函数运算的结果,还需要进一步操作,给函数一个返回值
  • print和return的区别:print仅仅是打印在控制台,而ruturn则是将return后面的部分作为返回值,也就是函数的输出.
  • return的作用:用来返回函数执行的结果,如果函数没有返回值,默认返回None,类型也是NoneType
  • 一旦遇到return 函数执行结束,后面的代码不会执行
  • 多个返回值的时候,python会帮我们封装成一个元组类型

在这里插入图片描述

在这里插入图片描述

四、Python3.8强制位置参数

Python3.8 新增了一个函数形参语法 / ,来指明函数形参/之前必须使用位置参数,不能使用关键字参数的形式。

def f(a, b, /, c, d, *, e, f):
	# 形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参
    print(a, b, c, d, e, f)
    
#正确的
f(10, 20, 30, d=40, e=50, f=60)

#错误的
f(10, b=20, c=30, d=40, e=50, f=60)   # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60)           # e 必须使用关键字参数的形式

五、匿名函数

使用 lambda 来创建匿名函数,不再使用 def 语句这样标准的形式定义一个函数。

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。换句话说,lambda 函数的定义体中不能赋值,也不能使用 while 和 try等 Python 语句
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,目的是调用小函数时不占用栈内存从而增加运行效率。
lambda [arg1 [,arg2,.....argn]]:expression

在这里插入图片描述

六、局部变量和全局变量的作用域

  • 局部变量:在函数内部定义的变量,只有在函数内部起作用,函数执行结束,变量会自动删除,只在本函数范围内有效
  • 全局变量:在函数外定义的变量,即从定义变量的为只到本源文件结束都有效 可以被程序所有对象或函数引用
  • 当有外部变量时,main函数中的同名变量就是全局变量,如果没有外部变量,main函数里的变量依然是局部变量,也可以在函数内部声明变量为全局变量。

1、 全局变量

  • 此时函数内部定义的a是全局变量,所有的输出均为全局变量的信息

如果使用的是赋值语句,在函数内部相当于新建了一个变量,并且重新给了指向,当我们想让函数内部变量就是外部的那个全局变量,在赋值操作的时候,可以通过global关键字表示我在函数里的内部变量就是外面那个全局变量。
在这里插入图片描述

2、局部变量

在这里插入图片描述

五、练习

在这里插入图片描述

在这里插入图片描述

def Foo(x):
    if (x==1):
        return 1
    else:
        return x+Foo(x-1)

print(Foo(4))

————————————
10

在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ranrancc_/article/details/100756461

python学习之函数基础(定义,形参四大参数.返回值及变量的作用域)_追上大佬的脚步啊!的博客-爱代码爱编程

一.函数的定义 1.定义函数 #如果不主动调用函数,函数不会执行 def say_hello(): print('hello1') print('hello2') print('hello3')

全局变量作为函数的参数传递会发生什么结果?_fireflyqaq的博客-爱代码爱编程_全局变量作为函数参数

首先看一段代码!!! #include <iostream> using namespace std; int n = 10,m = 77777; struct test{ int n = 9; void print(int n){ cout << this->n << endl; cout <

Python之函数、形参与实参、函数的返回值、局部变量及全局变量及练习-爱代码爱编程

文章目录 一、函数的定义1、定义一个函数2、形参3、实参二、形参1、位置参数2、默认参数3、可变参数4、关键字参数三、函数的返回值四、局部变量和全局变量的作用域1、局部变量2、 全局变量五、练习12345 一、函数的定义 函数是组织好的,可以重复使用的,用来实现单一或者相关联功能的代码段,其实函数就是可以 实现某一功能的代码块,下次使用的时候

java中形参和实参的区别-爱代码爱编程

java中形参和实参的区别 一、形参        形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。 二、实参        实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 三、调用        形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束

python函数参数那些事,关键字参数与位置参数-爱代码爱编程

在调用函数时传给 function(或 method)的值。参数分为两种: 关键字参数 :在函数调用中前面带有标识符(例如 name=)或者作为包含在前面带有 ** 的字典里的值传入。举例来说,3 和 5 在以下对 complex()的调用中均属于关键字参数: complex(real=3, imag=5) complex(**{'real': 3,

005day 函数调用的传参问题,函数的返回值,局部、全局变量,方法的执行符-爱代码爱编程

一、函数的定义和参数 函数的定义: function 函数名(参数列表){函数体} 参数:形式参数(形参);实际参数:实参 形式参数:函数中形式上参与运算的数据。只是一个占位符。 1:函数定义的时候的小括号中的内容:形参列表。 2:形参的作用,用来接收方法的使用者传递的实际的参数。 3:形参的个数没有限制,也不需要添加var关键字。直接写参数的名字即可。

python入门之函数结构函数的参数_Python 基础之函数初识与函数参数-爱代码爱编程

一.函数初识 定义:满足某一个方法 满足某一个功能#(1)功能(包裹一部分代码 实现某一个功能 达成某一个目的)#(2)可以反复调用,提高代码的复用性,提高开发效率,便于维护管理#(3)函数的基本格式:#定义一个函数def函数名():code1code2 #调用函数函数名() #例子:(最简单的一个函数) #函数的定义处 def func(): print

python的try和except用法_python – 使用try和except语句赋值之前引用的局部变量-爱代码爱编程

参见英文答案 > local variable ‘servers’ referenced before assignment 2个 我在try和except语句中遇到一些问题,我有一个条目小部件,它接受字符串输入,但我有代码,后来将它转换为整数,问题是如果用户输入类似文本的东西,它会抛出这样的错误: Exception in Tkinter call

python中函数的参数属于全局变量_Python学习笔记(11)-局部变量、全局变量、返回值补充、参数补充、递归函数、匿名函数...-爱代码爱编程

局部变量 定义在函数中的变量叫做局部变量 作用范围:只能在函数中使用,函数外无法使用,如下两图: 图1:在函数内打印变量name,可以成功输出xiaoming 图2:在函数外打印变量name,提示变量name未定义 图1 图2 注意:形参也是局部变量 全局变量 定义在函数外的变量叫做全局变量 作用范围:在任何一个函数中均可以

python 在函数中调用全局变量_互联网人工智能编程语言Python函数的基本类型及局部和全局变量...-爱代码爱编程

IT技术研习社,专注互联网技术研究与分享,喜欢的朋友可以点击【关注】;把经验传递给有梦想的人; 一、函数基本类型 函数根据有没有参数 以及有没有返回值,可以相互组合,一共有4 种 组合形式 1. 无参数,无返回值 1. 只是单纯地做一件事情,例如显示菜单 2. 在函数内部针对全局变量进行操作,例如:新建名片,最终结果记录在全局变量

python函数调用局部变量_python函数调用中全局变量与局部变量的分析与理解-爱代码爱编程

此内容来自于沙行勉的《计算机科学导论-以python为舟》 函数调用的基本概念:程序语言中的函数与高中数学中的函数相似。高中函数,假设要实现z+x*y²这个计算。对于乘法计算,定义一个函数f(x,y)=x*y²,他有两个参数x和y。计算x²+y²后得到一个值,作为函数的返回值,赋给f(x,y)。这样就可以用z+f(x,y)来表示上面的运算,对于f(x

函数的四种输出方式-爱代码爱编程

函数的四种类型: # 1.无参无返回值函数 def no_money(): sum_1 = 0 for i in range(1,101): sum_1 += i print(sum_1) # 函数调用 no_money() # 2.无参有返回值函数 def series_add():#只能计算1——100

SyntaxError: positional argument follows keyword argument位置参数跟在关键字参数后面的解决方法-爱代码爱编程

1.明白什么是位置参数 ①定义: 位置参数指的是必须按照正确的顺序将实际参数传到函数中,调用函数时传入实际参数的数量和位置都必须和定义函数时保持一致。实参和形参数量必须一致。在调用函数,指定的实际参数的数量,必须和形式参数的数量一致(传多传少都不行),否则 Python 解释器会抛出 TypeError 异常,并提示缺少必要的位置参数。TypeErro

学数据结构(一)绪论(2)(抽象数据类型、参数传递和函数结果带出方式)-爱代码爱编程

目录 一 抽象数据类型 二 参数传递 三 函数结果带出方式 一 抽象数据类型 1.抽象数据类型与问题求解方法 抽象数据类型(简称ADT)是指基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。 一个抽象数据类型确定了一个模型,但将模型的实现细节隐藏起来;它定义了一组运算,但将运算的实现过程隐藏起来。 用抽象数据类型的概念来指