python入门基础系列八_Python入门(八) 函数基础

1. 定义一个函数:

1)必须以def开头

2)参数之间用,隔开

3)函数的内容以冒号:开始,并且缩进

4)不带表达式的return,相当于返回None

def function_name(parameters):

#do something

...

return [expression]

def cal_sum(a,b):

return (a + b)

#调用函数

sum = cal_sum(2, 6)

print(sum)

>>> 8

2. 函数的参数传递

我们知道在c++中,函数的参数既可以传递值,也可以传递引用。那么在Python中是怎么样的呢?

#改变整数

def change_number(num):

print("num = ", num)

num += 1

print('num = ', num)

num = 3

print('before change: num = ', num)

change_number(num)

print('after change: num = ', num)

>>>

before change: num =  3

num =  3

num =  4

after change: num =  3

#改变字符串

def change_string(string):

print("string = ", string)

string = 'hello'

print('string = ', string)

name = 'billy'

print('before change: name = ', name)

change_string(name)

print('after change: name = ', name)

>>>

before change: name =  billy

string =  billy

string =  hello

after change: name =  billy

#改变list

def change_list(list_test):

print(list_test)

list_test[0] = 111

#print(list_test)

list1 = [100, 'b']

change_list(list1)

print(list1)

>>>

[100, 'b']

[111, 'b']

通过上面的例子,可以看出,在Python中,对于整数、浮点数、True/False是按照值传递的,即会先将自己当前的值赋给函数的参数,在函数内部的任何修改均不影响外部的值。对于字符串、list、dict这种变量类型,是按照引用传递的,即函数的参数是传递对象的引用,因此在函数内部的修改,均会影响到变量的值。这里特别说明一下字符串的传递与修改过程,首先string参数指向"billy"对象,由于Python中的字符串是“不可变”对象,之后对string的修改,就是把string参数指向了"hello"对象了,而原先的name变量仍然指向"billy"对象。

3. 缺省参数:即让该参数有一个缺省值,这个在GUI编程中经常用到。

def create_label(width = 100, height = 10):

print('width = %d, height = %d' % (width, height))

create_label()

create_label(200)

create_label(200, 30)

>>>

width = 100, height = 10

width = 200, height = 10

width = 200, height = 30

4. 命名参数:默认的函数调用过程中,参数的传递是通过位置进行的,如果函数的个数比较多的情况下,我们很有可能会搞不清楚参数的位置,这个时候通过命名参数,就能很好的解决

def create_label(name, width, height = 10):

print('name = %s, width = %d, height = %d' % (name, width, height))

create_label('label1', 200, 40)

create_label(width=200, height=40, name='label2')

>>>

name = label1, width = 200, height = 40

name = label2, width = 200, height = 40

上述函数调用的效果是一样的,不过通过命名参数,参数的位置就不用要求name必须防止在前面了。

5.变长参数:在c语言中,用...来表示函数的参数个数不是固定的,那么在Python中,我们首先会想到可以传递一个tuple, list, dict,tuple, list, dict里面可以存放任意数量的值。如:

def cal_sum(num_list):

sum = 0

for num in num_list:

sum += num

return sum

list1 = [1, 2, 3]

print(cal_sum(list1))

>>>

6

课时这样子有个缺陷,就是每次都要把要传递的值保存到list中,Python通过*和**来解决,由Python帮我们完成此操作。

def cal_sum(*var_tuple):

sum = 0

for num in var_tuple:

sum += num

return sum

print(cal_sum(1, 2, 3, 4))

print(cal_sum(1, 2, 3, 4, 5, 6))

list1 = [1, 2, 3]

print(cal_sum(*list1))

>>>

10

21

6

*不能传递命名参数,必须使用**

def create_window(**var_dict):

print(var_dict)

for(k, v) in var_dict.items():

print(k ,v)

create_window(name='window1', height=300, width=200)

dict1 = {'name':'window2', 'width':200, 'height':300}

create_window(**dict1)

>>>

{'name': 'window1', 'height': 300, 'width': 200}

name window1

height 300

width 200

{'name': 'window2', 'height': 300, 'width': 200}

name window2

height 300

width 200

Note: 在函数的var_tuple参数前加上*,表示var_tuple接收的是一个tuple, 在var_dict参数前加上**,表示var_dict接收的是一个dict。

而在调用cal_sum函数时,在list1前面加上*,表示把list1中的元素作为可变参数传递进去。在调用create_window函数时,在dict1前面加上**,表示把dict1中的元素作为命名的可变参数传递进去。

6. 函数的返回值。在Python中是可以有多个返回值的

def return_value():

a = 1

b = 2

return a, b, a+b

num1, num2, num3 = return_value()

print(num1, num2, num3)

>>>

1 2 3

实际上Python会将所有的返回值存放到一个临时的tuple中,如果只有1个变量来接收返回参数,那么就会将此变量引用此tuple,如果有多个变量来接收返回参数,Python会对tuple变量进行unpack,此时会要求接收变量的个数与返回值的个数一样才行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值