signed

QiShunwang

“诚信为本、客户至上”

Python基础----函数基础

2021/1/28 14:06:28   来源:

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料、代码以及交流解答点击即可加入


目录

  • 函数的定义
  • 函数的基本使用
  • 函数参数
  • 函数的返回值
  • 函数的文档说明
  • 函数调用函数
  • 函数的高级使用
  • 局部变量和全局变量
  • 局部变量
  • 全局变量
  • 函数返回值
  • 一个函数返回多个数值的方式
  • 可变类型,不可变类型
  • 函数参数
  • 缺省参数
  • 不定长参数(*args, **kwargs)

函数的定义

函数的概念,函数是一堆准备好的代码,在使用的时候调用即可

def printinfo():
    print('hello')


printinfo()

函数的基本使用

  • 定义函数
    def 函数名():
    pass

  • 调用函数
    通过函数名调用,只要在调用时函数才会使用,执行到return函数结束

函数参数

  • 实参 在函数声明的时候定义的参数,不确定,形式参数
  • 形参 在函数调用的时候传入的参数
  • 关键点:在函数定义阶段,函数中的参数为变量,在函数调用阶段则为运算的数据
# def 函数名(参数):
#   函数体
# 函数名(参数)
# 函数声明的时候的参数是形参 不确定的  形式参数
def tell_story(person, person1, story):
    print('hello', person, person1, story)


tell_story(1, 2, 3)

# 在函数调用的时候传入参数,  实参
# 直接通过顺序传参
# 通过定义变量名的定义,按照顺序来对应
tell_story(person1=1, person=1, story=1)

函数的返回值

# 返回值 函数执行的结果,并不是所有的函数都有返回值
def add(a, b):
    c = a + b
    return c


result = add(1, 3)
print(result)

# 函数没有返回值 返回none
x = print('hello')
print(x)

函数的文档说明

# 函数的说明
def add(a, b):
    '''

    :param a:
    :param b:
    :return:
    '''
    c = a + b
    return c


# help(add) 显示函数文档说明
help(add)

函数调用函数

  • 在执行A函数内调用B函数时,只有执行完B函数之后才会继续在调用B的位置上执行A函数
def testB():
    print('---- testB start----')
    print('这里是testB函数执行的代码...(省略)...')
    print('---- testB end----')

def testA():
    print('---- testA start----')
    testB()
    print('---- testA end----')

testA()

函数的高级使用

局部变量和全局变量

局部变量

在函数内部定义的变量,在不同的函数可以定义名字相同的局部变量,各个不会产生影响,用来临时保存函数中定义的变量

全局变量

既可以在一个函数中使用,也可以在其他函数中使用
函数外部定义的变量为全局变量

# 可以使用一次global对多个全局变量进行声明
global a, b
# 还可以用多次global声明都是可以的
# global a
# global b

函数返回值

  • return 返回函数值,结束函数,一个函数可以有return,但是只会返回第一个return的值

一个函数返回多个数值的方式

  • 默认返回的值 数组,return返回的只要是可以存储多个数据的类型,那么就可以返回多个数据
def divid(a, b):
    shang = a//b
    yushu = a%b 
    return shang, yushu  #默认是元组

result = divid(5, 2)
print(result)  # 输出(2, 1)
def function():
    # return [1, 2, 3]  # [1, 2, 3]
    # return (1, 2, 3)  # (1, 2, 3)
    return {"num1": 1, "num2": 2, "num3": 3}  # {'num1': 1, 'num2': 2, 'num3': 3}


a = function()
print(a)
  • 可以对返回的数据进行拆包(元组,字典,集合)
def get_my_info():
    high = 178
    weight = 100
    age = 18
    return high, weight, age  # 函数返回三个数据,会自动打包为元组

# result = get_my_info()  # result 接收到一个元组
# print(result)

my_high, my_weight, my_age = get_my_info()  # 直接把元组拆分为三个变量来使用,更加方便
print(my_high)
print(my_weight)
print(my_age)

可变类型,不可变类型

  • 可以修改的则为可变参数,反之为不可变类型
  • 可变类型:列表,字典,文件,集合(修改之后内存地址不变)
  • 不可变类型:字符串,元组,整数(修改之后内存地址改变)

函数参数

缺省参数

  • 在函数参数(形参)中带有默认值的为缺省参数,必须要放在参数的末尾,否则会报错
  • 函数在调用时候如果没有赋值则取默认值
def say_hello(name, age, city='wuhan'):
    print("大家好,我是{},我今年{}岁,我来自{}".format(name, age, city))

'''
    缺省参数 传递参数,使用默认的参数
    如果没有传递参数会使用默认值
    缺省参数要放在后面 
'''
# 如果有位置参数和关键字参数,关键字参数一定要放在位置参数的后面 要不然会报错
say_hello('jerry', age='18', city='ll')
say_hello('张三', 18, city='jilin')

不定长参数(*args, **kwargs)

  • *args存放所有未命名的函数参数,为元组
  • ** kwargs 存放命名参数,形式为字典(key = values)
  • 如果很多个不定值的参数,则缺省参数放在args之后,*kwargs必须放在末尾
  • 传入值时要注意* 号,如果没有的话默认为* args
def add(a, b, *args, **kwargs):
    # c = a * kwargs
    # 缺省参数要放在最后面
    # return a + b + args
    print(kwargs)  # 多余的关键字会以字典的形式保存下来


# add(1, 2, 3)
add(1, 2, m=0, n=1)
def test(a, b, *args, **kwargs):
      "函数在声明时,需要两个参数"
    print('a={},b={},args={},kwargs={}'.format(a,b,args,kwargs))

test(2, 3, '你好', 'hi', 'how do you do', name="zhangsan", age=18)
# a=2,b=3,args=('你好', 'hi', 'how do you do'),kwargs={'name': 'zhangsan', 'age': 18}


b = ('hi', '大家好', '今天天气真好')
d = {'name': "zhangsan", "age": 19}

# 注意,在传入参数时的星号问题。
test(10, 20, *b, **d) 
# a=10,b=20,args=('hi', '大家好', '今天天气真好'),kwargs={'name': 'zhangsan', 'age': 19}


# 如果在传值时,不使用星号,会把后面的参数当做 args
test(10,20,b,d)
# a=10,b=20,args=(('hi', '大家好', '今天天气真好'), {'name': 'zhangsan', 'age': 19}),kwa