python基础——函数

函数:

概念:
具有特定功能代码的集合
这段代码用来解决一个问题,一类问题
把这段代码封装起来,也就是功能,过程。
当要重复使用一段代码,将其这段代码封装成函数,后面直接调用这个函数名即可。

一,无参函数的定义
格式

     def 函数名() :    #括号里面什么都不写,表示无参
            函数体
     函数定义完成必须要调用。
     函数名()
def information():
	"""
	这段函数的注释
	"""
	print("想要两颗西柚")

#调用函数,调用几次就执行几次

information()
information()

结果显示:
在这里插入图片描述
二,有参函数

格式

def   函数名(形式参数)
          函数体
调用
函数名(实参)

代码:

def information(name,age,gender):
	print("我叫",name)
	print("今年{}岁了".format(age))
	print("性别{}".format(gender))

#调用函数

information("xixi","18","女")

结果
在这里插入图片描述
三,有返回值的函数
当函数执行完成后,需要将某个结果显示给调用者,就需要return。
举个栗子
#如果我们需要函数运算,最后需要得到运算结果,此时我们就需要定义返回值

def add(x,y):
	sum = x + y
	#需要将返回
	return sum

a = float(input("please a num1:"))
b = float(input("please a num2:))

#调用
c = add(a,b)  
#return 需要接返回值
print("{} + {} = {}".format(a,b,c))

注:
当有return时,在调用函数时,若直接调用函数,就会报错,因此需要用对象将return接着,就是
对象名 = 函数名(实际参数)
运行结果:
在这里插入图片描述
四,全局变量在函数中的使用

a = float(input(“please a num1:”))
b = float(input(“please a num2:”))
这里的变量名称可以带定义为x,y
因为这里的变量的是全局变量(本地变量),而函数里定义的变量为局部变量,并不影响。

五,函数的调用过程
函数的初始化是在内存的堆中,在调用函数时会把整个函数压栈(先进后出),函数执行完成就会立刻出栈(弹栈),不在栈中。

msg = "hello"
index = 30     #全局变量
def show():
	a = 10     #局部变量

	print("start")
	print(msg)
	global index    
	
	index += 1
	print(index)
	print("ending")

show()
global   index 
如果注释掉这一行,你会发现报错
因为当调用函数时,里面的 index += 1,会改变全局变量,而index=30 是最初在栈中的值,但改变后,函数又被弹出。
全局变量这样是不能被改变的。
所以解决办法:
   就是声明全局函数
   格式
   global    全局变量

运行结果:

在这里插入图片描述
六,值传递

def test (a,b):
	a += 10
	b += 20
	print("over")
a=100
b=200
test(a,b)
print(a,b)

运行结果
在这里插入图片描述
七,引用传递

ef  test(msg):
	print("收到一个消息{}".format(msg))
	return "haha"
c = test     
print(c)     

运行结果:
在这里插入图片描述

出现的是test函数在堆中的地址,test函数存放在堆中,调用时出现test函数压栈,
此时c=test 可用赋值理解,将test的地址给c
所以c和test都指向test函数堆中的地址,因此结果为test函数地址
因此c也是函数,因此可调用

def  test(msg):
	print("收到一个消息{}".format(msg))
	return "haha"
c = test     
c1 = c("cute")
print(c1)
               #c1为返回值

运行结果:
在这里插入图片描述
八,函数的默认值
有的参数值是固定的,该值一个默认值。
当给定一个值(r,2),就按照给定的值算
没给就按默认的值算

def get_circle_area(r, PI=3.14):     #PI= 3.14 就是给定的默认值
	return PI * r * r

r = float(input("请输入圆的半径:"))

area = get_circle_area(r, 2)         
print("半径为{}的圆,它的面试是{}".format(r, area))

r = float(input("请输入圆的半径:"))
area = get_circle_area(r)
print("半径为{}的圆,它的面试是{}".format(r, area))

结果:
在这里插入图片描述
九,函数的递归
在递归中,如果无结束条件,递归是一个死循环。

def sum(n):
	if n == 1:
		return 1      #当n = 1 时,不在调用sum()函数,直接返回1.
	return n + sum(n-1)
res = sum(100)
print("1-100的和{}".format(res))

十,
(1)可变参数
*变量名:
def test(x,y,z,*args)

def  test(x,y,z,*args):
	print(x+y+z)
	print(args)
	#print(args[1],args[2])  :以下标取出参数
test(1,2,3,4,5,6,7,8)

超过普通参数,由可变参数接收
*args:以元组方式接收其他参数

运行结果:
在这里插入图片描述
(2)命名参数:
**变量名:以键值对方式存

def  test(x,y,z,*args,**kwargs):
	print(x+y+z)
	print(args)
	print(kwargs)
test(1,2,3,4,5,6,7,8,age=16,name="xixi")

运行
在这里插入图片描述
注:
参数的顺序
普通参数,默认参数,可变参数,命名参数
以上两个都是:需要保留扩展函数功能时使用
(3)匿名函数

def haha(hi):      # 函数引用传递,hi()此时为一个函数,相当于xixi()
	hi()
def xixi():
	print("nihao")
haha(xixi)

等价于

python默认不支持匿名函数,所以引入lambda表达式
格式

      lambda [参数1,参数2]:语句
def haha(hi):
	hi()
haha(lambda:print("nihao"))

运行
在这里插入图片描述
(4)全局函数

  eval     默认以逗号分隔元素
>>> a = eval(input("entar three number:"))
entar number:(1,2,3)     
>>> a
(1, 2, 3)
>>> x,y,z = eval(input("entar three number:"))
entar number:1,2,3
>>> x
1
>>> y
2
>>> z
3

(5)返回多个值

def function():
	a =1
	b =2
	c =3
	return a,b,c
#res = function()
#print(res)
x,y,z = function()    这是元素,  注释掉的两行与后两行等价,(x,y,z) = function()  , 以元组
print(x,y,z)

运行
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值