Python函数入门

1、什么是函数

具有特殊功能的一段代码的封装
C语言是一门面向过程(功能、函数)的语言
具有名称的一段具体功能代码的统称

函数作用:代码封装、提高代码的复用性、解耦合的作用

2、python中如何定义函数

使用关键字 def # define function

def 函数名称([参数列表]):
   # 函数体
   # [return 返回值]

调用函数的帮助文档

 print(print_msg.__doc__)
 print(help(print_msg))

3、函数的调用

函数名称([参数列数])

def show_info(name, age, address, intro):
	print("我叫{}, 我今年了{}岁了,我家住在{},我喜欢{}".format(name, age,\   
	address, intro))
show_info("小明", 12, "黄土高坡", "喜欢小姐姐")
show_info("大明", 20, "东京", "比较冷的东西")

4、函数分类

 |-- 定义有没有参数
 	 |-- 无参函数
 	 |-- 有参函数
 	  函数的参数,要根据实际来决定,是否需要参数
 |-- 是否有返回值
 	 |-- 无返回值
 	 |-- 有返回值
 	 在函数中,当遇到return关键字的时候,函数会立刻返回
def show(): #无参
	print("hell world")
def show_msg(msg):  #有参
	print("接收到一个信息--->", msg)
	
def add(x, y):
 """
 	 计算两个数之和
 	 并且将结果返回
 """
	 res = x + y
	 return res
	 
# show()
# show_msg("明天是六一儿童节,大家节日快乐,记得给我礼物哦~~~")
num1 = float(input("第一个值:"))
num2 = float(input("第二个值:"))
sums = add(num1, num2)
print("{} + {} = {}".format(num1, num2, sums))

5、全局变量和局部变量

  1. 全局变量:定义在模块(.py)中,可以在该模块定义后任何地方都可以访问
  2. 局部变量:定义在函数内部的变量,作用域只是在当前函数内有效,出了函数,无法访问到
  • 在函数中,能不能访问到全局变量?
    当然可以,但是注意:在python中,函数内不允许修改全局变量
    如果确实在函数内,需要修改全局变量,必须要提前申明
    global 全局变量 ##需要修改全局变量可以使用global,尽量不用
# 定义一个全局变量
# num = 1000

# def say(count):
#  	# 如果确实在函数内,需要修改全局变量,必须要提前申明
# 	global num
# 	print("hello,函数开始运行了")
# 	# my_count 是定义在函数内部的变量,局部变量
# 	# 局部变量的作用域只在当前的函数内有效
# 	my_count = 5000
#	print(num)
#   	# 数量加1
#  	num += 1
#  	print(num)
#  	return

# say(10)
# print(num)

name = "old wang"

def change_name():
	global name
 	# name = "old pan"
	name += " is good man"
 	print(name)
 	
change_name()
print(name)

6、函数的调用原理

压栈,函数调用本质就是将堆中的函数调用到栈中执行,这个过程被称为压栈,等函数执行完成, 会立刻执行出栈(弹栈)

栈:先进后出(好比手枪弹夹,先压入的后弹出)

7、引用传递和值传递

  • 值传递:本质就是传递数据值的拷贝,跟原先的那个值没有关系
  • 引用传递:本质是传递指针(地址),所以说实质操作的就是堆
def add_user(users):
 	 users.append("不法狂徒")
	 users.append("张三")
if __name__ == "__main__":
	 # python的main函数
	 # 注意:python的中main,主要作用是写在main中的代码
	 # 并不会被导入其他模块中
	 # num1 = 10
	 # num2 = 30
	 # 值传递
	 # num1, num2 = change(num1, num2)
	 # print(num1)
	 # print(num2)
	 
	 # ls是一个列表,对象,存在堆中,ls存储的堆中的地址
	 ls = ["赵大", "钱七", "王五", "李四"]
	 add_user(ls)
	 print(ls)

8、函数的参数问题

|-- 默认值参数
 	# 默认值参数,在参数上,给定一个最常用的值,在调用的时候,
 	# 如果和默认的值一致,就可也不用传递这个参数
 	def get_cricle_area(r, pi=3.14):
  		pass
 	注意:默认值参数,必须放在普通后面!!!
|-- 可变参数
 	def show(name, age=16, *args):#可写可不写称为可变
  		pass
	args以元组的形式保存
	
|-- # 命名参数(关键字参数)
 	def show2(name, age, **kwargs):
  		pass
 	kwargs是以字典的形式保存
# 默认值参数,在参数上,给定一个最常用的值,在调用的时候,
# 如果和默认的值一致,就可也不用传递这个参数
def get_cricle_area(r, pi=3.14):
	 return r * r * pi
	 
# 可变参数
def show(name, age=16, *args):
	 print(name)
	 print(age)
	 print(args)
	 
# 命名参数(关键字参数)
def show2(name, age, **kwargs):
	 print(name)
	 print(age)
	 print(kwargs["address"])
	 print(kwargs.get("height"))
 
# 万能参数
def show3(name, age, gender, *args, **kwargs):
	 pass
	 
if __name__ == '__main__':
	 # print(get_cricle_area(3, 3.14))
	 # print(get_cricle_area(3, 3.141592))
	 # print(get_cricle_area(3, 3.1415926535))
	 # print(get_cricle_area(3))
	 # print(get_cricle_area(3, 4))
	 
	 # show("刘建宏", 16, "123456", "男")
	 
 	 show2("刘帅哥", 16, gender="男", address="陕西西安", height=1.89)

9、函数递归

函数自身调用自身
注意:必须要有终止条件,没有终止条件的递归是一个死循环
StackOverflowException

import sys

# python中规定递归默认不能超过1000次
print(sys.getrecursionlimit())
# 修改递归的默认极限值
sys.setrecursionlimit(10000)

def get_sum(n):
	 # 递归必须要有终止条件,如果没有终止条件,递归就是一个死循环
	 # 直到栈溢出为止
	 if n == 1:
	     return 1
	 return n + get_sum(n - 1)
	 
res = get_sum(100)
print(res)

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值