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,此时会要求接收变量的个数与返回值的个数一样才行。

时间: 2024-10-18 23:07:38

Python入门(八) 函数基础的相关文章

python入门15 函数

函数 1 python内置函数 2 匿名函数lambda 3 自定义函数 def functionname(arg):... #coding:utf-8 #/usr/bin/python """ 2018-11-11 dinghanhua 函数 """ '''内置函数''' print(round(2.345,2)) #四舍五入,保留2位小数;绝对值 print(abs(-23.333)) #绝对值 '''匿名函数 lambda''' lambd

(一)Python入门-5函数:03函数也是对象-内存分析

函数也是对象,内存底层分析: Python中,“一切都是对象”.实际上,执行def 定义函数后,系统就创建了相应的函数 对象.我们执行如下程序,然后进行解释: 1 #函数也是对象 2 def print_star(n): 3 print('*'*n) 4 5 print_star(3) 6 c = print_star 7 c(3) 8 9 print(id(print_star)) 10 print(id(c)) 11 print(type(c)) 上面代码执行 def 时,系统中会创建函数对

(一)Python入门-5函数:07lambda表达式和匿名函数-eval()函数

一:lambda表达式和匿名函数 lambda表达式可以用来声明匿名函数.lambda 函数是一种简单的.在同一行中定义函数 的方法.lambda函数实际生成了一个函数对象. lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数 的返回值. lambda表达式的基本语法如下: lambda arg1,arg2,arg3... : <表达式> arg1/arg2/arg3为函数的参数.<表达式>相当于函数体.运算结果是:表达式的运算结果. #lambd

python入门编程之基础

Python, 是一种面向对象.解释型计算机程序设计语言.Python语法简洁清晰,特色之一是强制用空白符作为语句缩进.Python的设计哲学是"优雅"."明确"."简单". Python是一门具有强类型(即变量类型是强制要求的).动态性.隐式类型(不需要做变量声明).大小写敏感(var和VAR代表了不同的变量)以及面向对象(一切皆为对象)等特点的编程语言. Python可用来干嘛?系统编程 :提供API(Application Programm

Python入门之函数的装饰器

本章目录: 装饰器: 一.为什么要用装饰器 二.什么是装饰器 三.无参装饰器 四.装饰器语法糖 五.认证装饰器实现 六.叠加多个装饰器 七.带参装饰器 =========================================================== 一.开放封闭原则 引子--为什么要用装饰器 软件一旦上线后,对修改源代码是封闭的,对功能扩展是开放的. 也就是说我们必须找到一种解决方案: 能够在不修改一个功能源代码以及调用方式的前提下,为其加上新功能 总结,原则如下: 1.不

python入门时最基础的一些报错

今天抽了点时间  给大家总结一下 刚才是学python写程序时出现的一下最基础也是最常用的报错信息和一些常见的英语单词 以后还会有补充  希望对大家有所帮助! 1:syntaxError:语法错误 2:invalid syntax :无效的语法 3:Indentation Error:缩进错误 4:expected:盼望 5:indenterd:缩进 6:block:块 7:Unexpected:意外的

Python之路-函数基础和参数

一.函数定义 def 函数名(arg1,arg2): =============>函数定义 '描述信息' =============>print(函数名.__doc__) 显示注释 函数体 =============>函数主体 return 1 =============>返回值可以是任意类型   1.空函数 def 函数名(): pass 一定要加上pass,一般在函数功能定义出来,方便以后扩展编写 2.内置函数 内置在Python解释器中,可以直接被调用的builtins 3.

Python之路 函数基础

基本定义 函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method. 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变

(一)Python入门-5函数:01函数的基本概念-内存分析-函数的分类-定义和调用

一:函数介绍 函数是可重用的程序代码块.函数的作用,不仅可以实现代码的复用,更能实现代码的 一致性.一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现. 在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封 装,并增加了函数调用.传递参数.返回计算结果等内容. 函数基本概念: 1. 一个程序由一个个任务组成:函数就是代表一个任务或者一个功能. 2. 函数是代码复用的通用机制. 二:Python函数的分类 Python中函数分为如下几类: 1. 内置函数

(一)Python入门-5函数:10nonlocal-global-LEGB规则

一:nonlocal关键字 nonlocal 用来声明外层的局部变量. global 用来声明全局变量. #测试nonlocal.global关键字的用法 a = 100 def outer(): b = 10 def inner(): nonlocal b #声明外部函数的局部变量 print('inner:b',b) b = 20 #内部函数中修改了外部函数变量b的值 global a #声明全局变量 a = 200 inner() print('outer:b',b) outer() pr