1 pycharm快捷键

Ctrl + P 参数信息(在方法中调用参数)
Ctrl + Q 快速查看文档

2 定义

(1) 用于封装一个特定的功能,表示一个功能或者行为。
(2) 函数是可以重复执行的语句块, 可以重复调用。

3 作用

提高代码的可重用性和可维护性(代码层次结构更清晰)。

4 基础语法

4.1 定义函数

(1) 语法:
def 函数名(形式参数): 函数体
(2) 说明:
def 关键字:全称是define,意为 ”定义”。
函数名:对函数体中语句的描述,规则与变量名相同。 形式参数:函数定义者要求调用者提供的信息。
函数体:完成该功能的语句。
(3) 函数的第一行语句建议使用文档字符串描述函数的功能与参数。

	# 形式参数:表面的不具体的数据
def attack(count):
"""
攻击
:param count:次数
"""
for    in range(count): 
print("直拳")
print("摆拳") 
print("勾拳")

4.2 调用函数

(1) 语法:函数名(实际参数)
(2) 说明:根据形参传递内容。

1  # 实际参数:真实的具体的数据
2  attack(5)
3  attack(2)

练习1: 定义函数,在终端中打印一维列表.

	list01 = [5, 546, 6, 56, 76, ] 
	for item in list01:
         print(item)

     list02 = [7,6,879,9,909,] 
     for item in list02:
          print(item)

练习2:创建函数,在终端中打印矩形.

1  number = int(input("请输入整数:")) # 5
2  for row in range(number):
3    if row == 0 or row == number - 1:
4       print("*" * number)
5   else:
6       print("*%s*" % (" " * (number - 2)))

4.3 返回值

(1) 定义:
函数定义者告诉调用者的结果。
(2) 语法:
return 数据 (3) 说明:
return后没有语句,相当于返回 None。
函数体没有return,相当于返回None。

def func01():
print("func01执行了") return 100
# 1. 调用者 ,可以接收也可以不接收返回值
func01()
res = func01() print(res)

# 2.在Python语言中 ,
# 函数没有return或return后面没有数据 ,
  # 都相当于return None
  def func02():
      print("func02执行了")
      return 16
  res = func02()
  print(res) # None 19
  # 3.return可以退出函数
  def func03():
     print("func03执行了")
      return
      print("func03又执行了") 25
  func03() 27
  # 4. return 可以退出多层循环嵌套
  def func04():
      while True:
          while True:
             while True:
                  # break 只能退出一层循环
                   print("循环体")
                   return 36
  func04()

5 可变/不可变类型在传参时的区别

(1) 不可变类型参数有:

数值型(整数,浮点数)
布尔值bool None 空值 字符串str 元组tuple
(2) 可变类型参数有:
列表 list
字典 dict
集合 set
(3) 传参说明:
不可变类型的数据传参时,函数内部不会改变原数据的值。 可变类型的数据传参时,函数内部可以改变原数据。

6 函数参数

6.1 实参传递方式argument

6.1.1 位置传参

定义:实参与形参的位置依次对应。

	def fun01(p1, p2, p3): 
		print(p1)
		print(p2) 
		print(p3)

# 位置实参:根据顺序与形参进行对应
fun01(1, 2, 3)

6.1.2 序列传参

定义:实参用*将序列拆解后与形参的位置依次对应。

def func01(p1, p2, p3): print(p1, p2, p3)

# 序列实参:拆 ,按照顺序与形参对应
list01 = [1, 2, 3] name = "孙悟空"
tuple01 = (4, 5, 6)
# func01(list01)
func01(*list01)  # 拆  1, 2, 3 func01(*name)  # 拆  孙 悟 空
func01(*tuple01)  # 拆  4, 5, 6

6.1.3 关键字传参

定义:实参根据形参的名字进行对应。

	def fun01(p1, p2, p3): 
		print(p1)
		print(p2) 
		print(p3)

# 关键字实参:根据名字与形参进行对应
fun01(p1=1, p2=2, p3=3) fun01(p2=2, p1=1, p3=3)

6.1.4 字典关键字传参

(1) 定义:实参用**将字典拆解后与形参的名字进行对应。
(2) 作用:配合形参的缺省参数,可以使调用者随意传参。

1  def func01(p1, p2, p3):
2      print(p1, p2, p3) 3
4  # 字典实参:拆 ,按照名称与形参对应
5  dict01 = {"p2":"B","p1":"A","p3":"C"}
6  func01(**dict01)

6.2形参定义方式parameter

6.2.1 缺省形参

(1) 语法:
def 函数名(形参名1=默认实参1, 形参名2=默认实参2, …): 函数体
(2) 说明:
缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数。

	def func01(p1 =0, p2="", p3=100):
		print(p1) 
		print(p2) 
		print(p3)

func01(p2=2)
func01(p2=2,p3=3)
# 支持同时使用位置实参与关键字实参
func01(1,p3=3)

# 注意1:先位置实参 ,后关键字实参 # func01(p1 =1,2,3) # 错误

6.2.2 位置形参

语法:
def 函数名(形参名1, 形参名2, …): 函数体

6.2.3 命名关键字形参

(1) 语法:
def 函数名(args, 命名关键字形参1, 命名关键字形参2, …): 函数体
def 函数名(
, 命名关键字形参1, 命名关键字形参2, …): 函数体
(2) 作用:
强制实参使用关键字传参

# 命名关键字形参:
# 星号元组形参后面的位置形参 # 限制实参必须是关键字实参
def func01(*args, p1, p2):
	print(args) print(p1)
	print(p2)


func01(p1=1, p2=2)
func01(1, 2, 3, p1=1, p2=2)


def func02(p1, *, p2=0):
	print(p1) 
	print(p2)

# 通常星号后面的命名关键字形参属于辅助参数 ,可选 .
func02(1)
func02(1, p2=2)

6.2.4 星号元组形参

(1) 语法:
def 函数名(*元组形参名): 函数体
(2) 作用:
可以将多个位置实参合并为一个元组
(3) 说明:
一般命名为’args’
形参列表中最多只能有一个

# 位置实参数量可以无限
def func01(*args): print(args)

func01()  # 空元组
func01(1, 2, 34)  # (1, 2, 34)
# 不支持关键字实参
# func01(args = 1,a=1)

6.2.5 双星号字典形参

(1) 语法:
def 函数名(**字典形参名): 函数体
(2) 作用:
可以将多个关键字实参合并为一个字典
(3) 说明:
一般命名为’kwargs’
形参列表中最多只能有一个

1  # 关键字实参数量无限
2  def func01(**kwargs):
3      print(kwargs) # {'a': 1, 'b': 2} 4
5  func01(a=1,b=2)
6  # func01(1,2,3) # 报错

6.2.6 参数自左至右的顺序

位置形参 -->星号元组形参 -->命名关键字形参 -->双星号字典形参

7 作用域LEGB

7.1 定义

变量起作用的范围。

7.2 分类

(1) Local局部作用域:函数内部。
(2) Enclosing 外部嵌套作用域 :函数嵌套。
(3) Global全局作用域:模块(.py文件)内部。
(4) Builtin内置模块作用域: builtins.py文件。

7.3 变量名的查找规则

(1) 由内到外: L -> E -> G -> B
(2) 在访问变量时,先查找本地变量,然后是包裹此函数外部的函数内部的变量,之后是全局变量,最后 是内置变量。
6.7.4 局部变量
(1) 定义在函数内部的变量(形参也是局部变量)
(2) 只能在函数内部使用
(3) 调用函数时才被创建,函数结束后自动销毁
6.7.5 全局变量
(1) 定义在函数外部,模块内部的变量。
(2) 在整个模块(py文件)范围内访问(但函数内不能将其直接赋值)。

7.6 global 语句

(1) 作用:
在函数内部修改全局变量。
在函数内部定义全局变量(全局声明)。
(2) 语法:
global 变量1, 变量2, …
(3) 说明
在函数内直接为全局变量赋值,视为创建新的局部变量。 不能先声明局部的变量,再用global声明为全局变量。

7.7 nonlocal 语句

(1) 作用:
在内层函数修改外层嵌套函数内的变量
(2) 语法
nonlocal 变量名1,变量名2, …
(3) 说明
在被嵌套的内函数中进行使用

	# 2. 全局作用域:文件内部
#   全局变量:在全部作用域内创建的变量 #   适用范围:整个文件
data02 = 20
data03 = [30]

def func01():
# 1. 局部作用域:函数内部
# 局部变量:在局部作用域内创建的变量 # 适用范围:一个函数
data01 = 10
print(data01) print(data02)

def func02():
# print(data01) # 不能访问其他函数局部变量 print(data02) # 读取全局变量

def func03():
# 在局部作用域中不能修改全局变量 # data02 = 200
# 必须通过global语句声明
global data02 data02 = 200

def func04():
# 没有修改全局变量
# 在修改全局变量指向的列表
# 所以不需要通过global语句声明
data03[0] = 300

func01() func02() func03() func04()
print(data02) # 200
print(data03) # [300]
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐