Python基础 05----函数基础

本文深入介绍了Python函数的使用,包括定义、基本使用、参数传递、返回值、文档注释、函数调用、高级特性如局部和全局变量。示例展示了如何定义函数、传递不同类型的参数、获取函数返回值,以及如何处理可变和不可变类型。此外,还详细讲解了缺省参数和不定长参数的用法。
摘要由CSDN通过智能技术生成

函数的定义

  • 函数的概念,函数是一堆准备好的代码,在使用的时候调用即可
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}),kwargs={}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值