python学习之自定义函数
一、不带参数函数
不带参数函数格式

def 函数名():
	函数体

不带参数函数的一个案例

def _factor():    #定义函数
    i=1
    nums=10
    print("%d的因数为:"%(nums))
    while i<=nums:    #循环求因数
        if nums%i==0: 
            print('%d'%i)
        i+=1
#===========================
_factor()   #调用函数
t=type(_factor)  #检查是否是函数类型
print(t)

'''结果为:
10的因数为:
1
2
5
10
<class 'function'>  #是函数类型
'''

注意:使用自定义函数,必须先定义或先引入定义模块文件,再调用自定义函数。不能先调用,再定义,否则报“找不到自定义函数错误”。

二、带参数的函数
带参数函数格式

def 函数名(参数):
	函数体

带参数函数案例
如:

def find_factors(nums):
    i = 1
    str1 = ''
    print("%d的因数为:" % nums)
    while i < nums:
        if nums % i == 0:
            str1 = str1 + ' ' + str(i)   #用字符串记录一个整数的因数
        i += 1
    print(str1)


# =======================================
num_list = [10, 18, 20, 30]
i = 0
num_length = len(num_list)
while i < num_length:
    find_factors(num_list[i])
    i += 1

与不带参数的函数相比,更加灵活,实用,可以接受任意正整数的传递并求因数。

通常把def 函数名(参数)的参数叫形式参数,调用函数时赋予的值叫实际参数。

三、带返回值的函数
格式:

def 函数名([参数]):
	函数体
	return 返回值

函数返回值:不带return语句的函数,其实默认都返回None值,如调用_factor()(不带参数案例),

def _factor():  # 定义函数
    i = 1
    nums = 10
    print("%d的因数为:" % (nums))
    while i <= nums:  # 循环求因数
        if nums % i == 0:
            print('%d' % i)
        i += 1


# ===========================
# _factor()  # 调用函数
print(_factor())
# t = type(_factor)  # 检查是否是函数类型
# print(t)
'''结果为:
10的因数为:
1
2
5
10
None'''

return语句在函数中除了返回值外,还起中断函数执行作用。
如:

def test():
    return 1  #return 将终止函数执行并返回值1
    print("Yes") #该语句不会执行
print(test())

带返回值的函数的案例(求因数)

def find_factors(nums):
    i = 1
    str1 = ''
    while i < nums:
        if nums % i == 0:
            str1 = str1 + ' ' + str(i)   #用字符串记录一个整数的因数
        i += 1
    # print(str1)
    return str1


# =======================================
num_list = [10, 18, 20, 30]
i = 0
num_length = len(num_list)
return_str=''
while i < num_length:
    return_str=find_factors(num_list[i]) #循环调用函数,并返回因数字符串
    print("%d的因数为:%s"%(num_list[i],return_str))
    i += 1

结果为:

python决定系数R2怎么求 python定义函数求因数_自定义函数


该案例的好处:

1、可以灵活获取处理结果,为调用代码所用

2、把附加的打印功能转移到函数体外,提高了调用者处理打印信息的灵活性。

四、自定义函数的完善

def find_factors(nums):
    '''
    find_factors是自定义函数
    nums是传递正整数的参数
    以字符串形式返回一个正整数的所有因数'''  #用一对三个单引号来包括描述文档
    i = 1
    str1 = ''
    while i < nums:
        if nums % i == 0:
            str1 = str1 + ' ' + str(i)   #用字符串记录一个整数的因数
        i += 1
    # print(str1)
    return str1

help(find_factors) #help函数用来获取函数的使用功能的信息。

可以得到以下结果:得到函数的相关信息,是用一对三个单引号的描述文档的内容。

python决定系数R2怎么求 python定义函数求因数_自定义函数_02

健壮性考虑

函数的参数是传递值的入口,必须考虑所传递的值是否符合要求。
如向find_factors(nums)传递一个字符,一个符号
如find_factors(‘a’),
会出现
TypeError: ‘<’ not supported between instances of ‘int’ and ‘str’
错误。

实际应用中出现这样的错误会非常糟糕,所以要对函数进一步完善。

我们需要在函数中进行如下完善:

if type(nums)!=int:
	print('输入值类型出错,必须是整数')
	return
if nums<=0:
	print('输入值范围出错,必须是正整数')
	return

五、把函数放到模块中

自定义函数建立后,如果需要被其他代码文件调用(以.py为扩展名的文件),或者需要通过共享,让其他程序员使用,需要把函数代码单独存放到一个可以共享的地方。

在Python语言中,通过建立独立的函数模块(Module)文件(以.py为扩展名的文件),共享给其他代码文件调用。

1、建立函数模块

1)首先新建一个空白的代码文件,存放自定义函数代码,如建立一个test.py的空函数模块文件。

python决定系数R2怎么求 python定义函数求因数_python决定系数R2怎么求_03


2)编写并调试完成自定义函数代码,如前面的find_factors(nums)函数。

3)把只属于自定义函数的代码复制到函数模块文件上,若有多个自定义函数,按照顺序复制即可。

python决定系数R2怎么求 python定义函数求因数_开发语言_04


test.py函数模块文件,实现了对find_factors(nums)函数代码的完整保存,完成这个过程后,该函数被其他python文件中的代码进行调用成了可能。

2、调用函数模块
在python语言编辑器里,除了默认内置函数外,其他函数的调用,必须先通过import语句进行导入,才能使用。

1)import语句导入整个函数模块
格式:import 函数模块名
(1)新建一个python文件,文件中输入调用代码

python决定系数R2怎么求 python定义函数求因数_python决定系数R2怎么求_05


(2)执行后结果为:

python决定系数R2怎么求 python定义函数求因数_后端_06


import语句直接导入模块后,调用模块文件里的函数格式如下:

模块名.函数名

通过模块名中间连接点号与函数名连接方式调用函数。

注意:必须要保证 调用.py 和模块文件test.py在同一个文件夹下,不然会报“找不到模块错误(ModuleNotFoundError)”。

2)import导入指定函数
格式:from 模块名 import 函数名1[,函数名2,…]

# import test
# print(test.find_factors(9))
from test import find_factors
print(find_factors(9))

该方法可以像内置函数一样使用模块中的自定义函数。

3)import导入所以函数
格式:from 模块名 import *
"*"代表指定模块里的所有函数。

4)模块名、函数名别名方式
如果导入模块,函数时发现名称过长,可以通过as定义别名的方式解决。
格式:模块名[函数名] as 别名

import test as t #给模块名定义别名

print(t.find_factors(9))

from test import find_factors as f #为自定义函数定义别名

print(f(9))

as语句还可以解决函数名称发生冲突的问题。

3、模块搜索路径
主要是解决在不同文件夹下模块调用的访问路径的问题,不然会报“找不到模块”的错误。

用sys.path方法指定需要访问的函数模块文件。

import sys

sys.path[0] = 'C:\应用\Pycharm\文件\\function'  # 模块路径
from test import find_factors

print(find_factors(10))
# 结果为:
#  1 2 5

正常的路径格式为’C:\应用\Pycharm\文件\function’格式,当时”\f“为”换页“转义字符,所以为了得到正确的路径,要在”\f“前在加一个”\“,让’\f‘原样输出。