python---函数(1)

1、函数
——C语言是一门面向过程的语言,函数就是行为、就是动作、就是功能、就是过程
——完成一定功能的代码块

2、python如何定义函数
——关键字 def——defined function(定义函数)
——函数名称的命名规范:和变量命名规范一致(下划线法,见名知意等)

def 函数名称(形式参数):#形式参数可有可无
	代码1
	代码2
	......
	代码n		
	return 返回值#return可有可无

3、函数的分类
是否存在返回值:
——有返回值的函数,使用return关键字返回结果,函数遇到return关键字,则立刻返回
——无返回值的函数

是否存在参数:
——有参函数:
1、参数的个数,根据情况任意,
2、参数的类型,是任意类型
——无参函数

函数由谁定义
——系统函数:
由官方定义的函数,如print()、input()、type()等
——第三方模块:
第三方(公司等)定义,需要安装这些模块,才能使用,在以后的内容会讲到
——pip install 模块名称
——pip(python install package)
——自定义函数:
我们写的函数,注意:(函数、变量……)命名时一定要注意,和系统的全局函数不要冲突!!(会覆盖掉原来的系统函数或者常见类型,比如变量定义不能是list)

4、全局变量和局部变量
全局变量:
——直接定义在py(模块)文件中的变量,一般定义在函数之外,不属于任何函数

局部(本地)变量:
——定义在函数内部的变量叫做局部变量,作用域在函数内部,在函数外部不能访问

注意:
——全局变量在函数直接访问,可以正常访问,但不能修改值,python不让修改
——如果要一定强制改呢?在函数的第一行,用global关键字声明需要修改全局变量

def 函数名称(形式参数):#形式参数可有可无
	global 全局变量名
	代码1
	代码2
	......
# 全局变量和局部变量
msg = "这个是全局变量"
def test():
	# 局部变量只能在函数内部使用,外界是无法访问的
	box = "这个是函数内部的变量"
	# 全局变量可以在任何位置访问到,包括函数内部
	print(msg)
	print(box)


test()
age = 10
def show_info(name):
	# 声明需要修改全局变量
	global age
	address = "陕西西安"
	age += 1
	print("我的名字是:", name)
	print(f'今年{age}岁了')
	print("我家在{}".format(address))


show_info("张三")
#print(address)#地址不能正常打印,函数内的参数,在外部不能访问

5、函数的调用
函数调用的本质(压栈、弹栈),函数本质就是一个对象
——压栈(push):将函数从堆内存中放到栈中执行
——弹栈(pop):函数执行完成后出栈内存

引用传递和值传递:
——引用传递:传递的是对象的地址(引用的含义),在传递4种容器(列表、集合、元组、字典、函数名)时,传递的是地址
——值传递:传递的是值

def change(ls):
	ls.append(100)
	ls.append(100)


# ls是对象,列表
ls = [1,2,3,4,5,6]
change(ls)
print(ls)#在列表后面添加两个值100的元素

6、函数参数:
普通参数:和其他编程语言类似,在形参中不进行操作

默认值参数:
——该参数,在大多数情况下,值是固定的一个值,此时可以使用默认值参数,如果不传该参数,值就取默认的,如果传递了,则按照传递的算
——注意:默认值参数,一定要写在普通参数之后

def test(radius,pi = 3.14):
	zhouchang = 2 * pi * radius
	mianji = radius **2 *pi
	print(zhouchang)
	print(mianji)

可变参数:
——在python,如果函数中参数可能有很多(参数可有可无),建议将这种参数设置为可变参数

def 函数名(普通参数,*args):#习惯性可变参数取名args
	代码块
#注意:可变参数默认是以元组封装所有参数
def test(x, y, *args):
	print(x)
	print(y)
	print(args)

命名(关键字)参数:
——规定了名称的参数(可有可无),例如print()的关键字参数print(“你好呀”,end="\n")默认是回车,可以通过给end赋值改变最后的操作

def 函数名(普通参数,**kwargs):#习惯性关键字参数取名kwargs
	代码块
#注意:关键字参数默认是以字典封装所有参数
# 关键字参数
def test(a, b, **kwargs):
 	print(a, b)
 	print(kwargs)


test(10, 20, name="张三", age=16, gender="男")

参数的一般顺序:(普通参数,默认值参数,可变参数,关键字参数)只能依次匹配,不可跳过前面的参数给后面的赋值

def test03(a, b=20, *args, **kwargs):
	print(a, b)
	print(args)
	print(kwargs)


test(20,14,12,3,43,34,34,name="张三")

7、函数递归:
——假装问题已经解决,无线套娃,自己调用自己,最终解决问题
——函数是递归函数的两个条件:
——1、函数自身调用自身
——2、一定要有终止条件!!(否则是一个死循环)
注意:python中,不允许递归超过1000次,当然如果一定要调整,可以使用如下代码:

import sys
# 获取递归限制次数
sys.getrecursionlimit()
# 重新设置递归限制次数
sys.setrecursionlimit(10000)#设置递归限制次数10000次

从斐波那契数列谈递归:
——高中我们知道斐波那契数列:1,1,2,3,5,8,13,…从第三项开始,最后一项是前两项的和,那么如果想知道第n个数是多少该怎么想呢?
——可以假设问题已经解决了,即已经知道第n-1和第n-2个数,然后相加就可以了,可以定义一个函数来进行计算
——那么实际上我们并不知道前面的第n-1和第n-2个数,但是我们可以调用定义好的函数,计算前两个数,这就是递归的思想
——最前面的两个数1,1是已知的,这个就是递归函数的终止条件
——整个过程类似于:
第一次,(an-1)+(an-2)
第二次,(an-2+an-3)+(an-3+an-4)
第三次,(an-3+an-4)+(an-4+an-5)+(an-4+an-5)+(an-5+an-6)

def fibonacci(n):
	if n == 1 or n = 2:
		return 1
	return fibonacci(n - 1) + fibonacci(n - 2)


n = int(input(请输入n的值:))
print(fibonacci(n))
#n值不能过大,不然,栈,boom

本人第一次接触python,水平有限,如有错误请大家给予指正,谢谢大家

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值