python函数1_定义_导入_调用_Debug_函数文档_

1、函数入门

两个文件,一个函数定义,一个函数调用
在这里插入图片描述

1.1 函数定义

hm_01_函数定义.py

def multiple_table():
    i = 1
    while i <= 9:
        j = 1
        while j <= i:
            print('%d*%d=%d' % (j, i, i * j), end='\t')
            j += 1
        print()
        i += 1

1.2 函数调用

hm_02_调用函数.py

import hm_01_函数定义  # 文件名不要以数字开头

print("调用工具包: 工具包名称.方法")
hm_01_函数定义.multiple_table()

1.3 导入自己写的.py文件报红

将.py文件所在目录标记为源目录Sources Root即可

2、函数基本使用

2.1 函数的定义

def 函数名():

    函数封装的代码
    ……

函数名称需得是合法标识符

2.2 函数调用

调用函数很简单的,通过 函数名() 即可完成对函数的调用

2.3 第一个函数演练

需求

    1. 在utils.py中编写一个打招呼 countSum 的函数,求前n项和
    1. 在另一个.py调用countSum的代码
  • (注:两个文件在同一个目录下 将该目录 Mark Directory as -> Sources Root 否则pycharm检测不到)

utils.py

def countSum(n):
    sumN, i = 0, 0
    while i <= n:
        sumN += i
        i += 1
    return sumN

#print(countSum(100))

01-函数定义调用.py

import utils

n = 100
ans = utils.countSum(n)*10-100
print(ans)

2.4 PyCharm 的调试工具 Debug

  • F8 Step Over 可以单步执行代码,会把函数调用看作是一行代码直接执行
  • F7 Step Into 可以单步执行代码,如果是函数, 会进入函数内部
  • F9 Resume Program 执行到下一个断点
    在这里插入图片描述

文件内任意位置 右键Debug运行

2.5 函数的文档注释 (说明文档)

函数定义下方 以多行注释的形式给出
多行注释按enter 自动补全格式

  • 在开发中,如果希望给函数添加注释,应该在 定义函数 的下方,使用 连续的三对引号 (就是def行下方写的多行注释)
  • 连续的三对引号 之间编写对函数的说明文字
  • 函数调用 位置,使用快捷键 CTRL + Q 可以查看函数的说明信息

注意:因为 函数体相对比较独立函数定义的上方,应该和其他代码(包括注释)保留 两个空行

def sayHello(n):
    """输出'hello world'

    :param n: 输出个数
    :return: void
    """
    print('hello world  '*n)


sayHello(10)

函数说明直接就写在第一个’''后面 不要换行了
参数说明和函数说明之间空一行

在这里插入图片描述
还可以调整一下显示方式
在这里插入图片描述

help(函数名) 打印文档

def sayHello(n):
    """输出'hello world'

    :param n: 输出个数
    :return: void
    """
    print('hello world  '*n)

help(sayHello)

在这里插入图片描述

3. 函数的参数

演练需求

  1. 开发一个 sum_2_num 的函数
  2. 函数能够实现 两个数字的求和 功能

演练代码如下:

def sum_2_num():

    num1 = 10
    num2 = 20
    result = num1 + num2

    print("%d + %d = %d" % (num1, num2, result))

sum_2_num()

思考一下存在什么问题

函数只能处理 固定数值 的相加

如何解决?

  • 如果能够把需要计算的数字,在调用函数时,传递到函数内部就好了!

3.1 函数参数的使用

  • 在函数名的后面的小括号内部填写 参数
  • 多个参数之间使用 , 分隔
def sum_2_num(num1, num2):

    result = num1 + num2
    
    print("%d + %d = %d" % (num1, num2, result))

sum_2_num(50, 20)

3.2 参数的作用

  • 函数,把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用
  • 函数的参数,增加函数的 通用性,针对 相同的数据处理逻辑,能够 适应更多的数据
    1. 在函数 内部,把参数当做 变量 使用,进行需要的数据处理
    2. 函数调用时,按照函数定义的参数顺序,把 希望在函数内部处理的数据通过参数 传递

3.3 形参和实参

  • 形参定义 函数时,小括号中的参数,是用来接收参数用的,在函数内部 作为变量使用
  • 实参调用 函数时,小括号中的参数,是用来把数据传递到 函数内部 用的

3.4 默认参数值

# 函数参数提供默认值
def add_ab(a=1, b=2):
    return a + b

x = add_ab(5, 6)
y = add_ab() # 提供了默认值得参数,可以不指定实参值,执行时使用默认值
print(x,y)

在这里插入图片描述

3.5 可变(不定长)参数

# 可变参数函数
def add_nums(a, *args):
    for i in args:
        a += i
    return a

print(add_nums(1, 2))
print(add_nums(1, 2, 3, 4))
print(add_nums(1, 2, 3, 4, 5))

在这里插入图片描述

可变参数是键值对
# 可变参数是键值对 
# 并如何方便地遍历键值对
def add_nums2(a,**kvargs):
    for key,value in kvargs.items():
        print(key,value) #直接打印2个参数
add_nums2(1,x=3,y=4,z=5)

在这里插入图片描述

4. 函数的返回值

  • 在程序开发中,有时候,会希望 一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理
  • 返回值 是函数 完成工作后,最后 给调用者的 一个结果
  • 在函数中使用 return 关键字可以返回结果
  • 调用函数一方,可以 使用变量接收 函数的返回结果

注意:return 表示返回,后续的代码都不会被执行

def sum_2_num(num1, num2):
    """对两个数字的求和"""

    return num1 + num2

# 调用函数,并使用 result 变量接收计算结果
result = sum_2_num(10, 20)

print("计算结果是 %d" % result)

5. 一个函数多个返回值

# 可以直接返回多个返回值
def max_min(*arr):
    a = max(arr)
    b = min(arr)
    return a, b


a, b = max_min(3, 4, 9, 0, 19, 23, 12)
print(a, b)

在这里插入图片描述

6. 使用模块中的函数

模块是 Python 程序架构的一个核心概念

  • 模块 就好比是 工具包,要想使用这个工具包中的工具,就需要 导入 import 这个模块
  • 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块
  • 在模块中定义的 全局变量函数 都是模块能够提供给外界直接使用的工具
  • 模块名得是合法标识符

6.1 第一个模块体验

whu_创建模块.py

# 一个.py文件就是一个模块

# 全局函数
def add(a, b):
    return a + b

# 全局函数
def add(*arg):
    sumA = 0
    for i in arg:
        sumA += i
    return sumA

# 全局变量
name = '全局变量'

whu_体验模块.py

import whu_创建模块

a1 = whu_创建模块.add(10, 20)
print(a1) #30

a2 = whu_创建模块.add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(a2) #55

print(whu_创建模块.name) #'全局变量'

在这里插入图片描述
别忘了标记目录为 sources root

体验小结
  • 可以 在一个 Python 文件定义 变量 或者 函数
  • 然后在 另外一个文件中 使用 import 导入这个模块
  • 导入之后,就可以使用 模块名.变量 / 模块名.函数 的方式,使用这个模块中定义的变量或者函数

6.2 模块名也是一个标识符

  • 标示符可以由 字母下划线数字 组成
  • 不能以数字开头
  • 不能与关键字重名

注意:如果在给 Python 文件起名时,以数字开头 是无法在 PyCharm 中通过导入这个模块的

6.3 Pyc 文件(了解)

Ccompiled 编译过 的意思

操作步骤

  1. 浏览程序目录会发现一个 __pycache__ 的目录
  2. 目录下会有一个 whu_创建模块.cpython-39.pyc 文件,cpython-39 表示 Python 解释器的版本
  3. 这个 pyc 文件是由 Python 解释器将 模块的源码 转换为 字节码
    • Python 这样保存 字节码 是作为一种启动 速度的优化

import xxx.py
则 xxx.py会被认为是一个写好的工具,不需要(或者很少)修改了,直接用c编译器给他编译好,以后调用模块里的东西不必一行行解释了,直接就是二进制了

字节码

  • Python 在解释源程序时是分成两个步骤的

    1. 首先处理源代码,编译 生成一个二进制 字节码
    2. 再对 字节码 进行处理,才会生成 CPU 能够识别的 机器码
  • 有了模块的字节码文件之后,下一次运行程序时,如果在 上次保存字节码之后 没有修改过源代码,Python 将会加载 .pyc 文件并跳过编译这个步骤

  • Python 重编译时,它会自动检查源文件和字节码文件的时间戳(很好判定是否有被修改)

  • 如果你又修改了源代码,下次程序运行时,字节码将自动重新创建

提示:有关模块以及模块的其他导入方式,后续课程还会逐渐展开!

模块是 Python 程序架构的一个核心概念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值