函数

一、函数的创建

简单格式

def function_name(参数表):
函数体
return

如果没有写return,函数会默认返回一个none

二、函数的参数

必需参数:

调用函数时必需参数须以正确的顺序传入,调用的数量必须和声明时的一样。

def func1(name,age):
print('my name is %s,i am %d years old'%(name,age)) func1('smilepup',20)
#输出my name is smilepup,i am 20 years old

关键字参数:

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

def func1(name,age):

    print('my name is %s,i am %d years old'%(name,age))

#func1(20,'smilepup')#报错
func1(age = 20,name = 'smilepup')

  

缺省参数(默认参数):

调用函数时,缺省参数的值如果没有传入,则被认为是默认值,如果输入了缺省参数了,则传入输入的参数。

def print_info(name, age, gender='male'):

    print('Name:%s' % name)
print('age:%s' % age)
print('Sex:%s' % sex)
return print_info('smilepup', 20)#gender为male
print_info('puppy', 2, 'female')#gender为female

  

不定长参数

当需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。

def func1(*args):

    print(args)
return func1(1,2,3,4)
#输出(1, 2, 3, 4)

  args中的数据用元组保存。

用**的变量名可以存放命名的变量参数

def func1(**args):

    print(args)
return func1(name = 'smilepup',age = 20,gender = 'male')
#输出{'name': 'smilepup', 'age': 20, 'gender': 'male'}

  而这种则用字典保存数据。

当函数需要传入不同类型的变量时,要注意顺序必需参数、默认参数、带一个星号的不定长参数、带两个星号的不定长参数的顺序定义形参,否则会报错。

三、作用域

L:local,局部作用域,即函数中定义的变量;

E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

G:globa,全局变量,就是模块级别定义的变量;

B:built-in,系统固定模块里面的变量,比如int, bytearray等。

搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域

global关键字

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下

count = 10
def outer():
global count
print(count)
count = 100
print(count)
outer()
#10
#100

  

四、递归函数

定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

斐波那契数列

def fibo(n):
before = 0
after = 1
for i in range(n - 1):
ret = before + after
before = after
after = ret return ret

  

从零开始的Python学习Episode 10——函数的更多相关文章

  1. 从零开始的Python学习Episode 23——进程

    ---恢复内容开始--- 进程 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用 ...

  2. 从零开始的Python学习Episode 22——多线程

    多线程 线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. ...

  3. 从零开始的Python学习Episode 20——面向对象(3)

    面向对象之封装 封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体. 隐藏 在python中用双下划线开 ...

  4. 从零开始的Python学习Episode 12——迭代器&生成器

    生成器 列表生成式 用于快速地生成一个列表 a = [x*x for x in range(1,9)] print(a) #输出[1, 4, 9, 16, 25, 36, 49, 64] 也可以用于生 ...

  5. 从零开始的Python学习Episode 21——socket基础

    socket基础 网络通信要素: A:IP地址   (1) 用来标识网络上一台独立的主机 (2) IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络/网段.主机号:用于识别该网络中的 ...

  6. 从零开始的Python学习Episode 17——序列化

    序列化 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语 言中也被称之为serialization,marshalling,flattenin ...

  7. 从零开始的Python学习Episode 16——模块

    一.模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相 ...

  8. 从零开始的Python学习Episode 14——日志操作

    日志操作 一.logging模块 %(message)s 日志信息 %(levelno)s 日志级别 datefmt 设置时间格式 filename 设置日志保存的路径 level 设置日志记录的级别 ...

  9. 从零开始的Python学习Episode 13——常用模块

    模块 一.time模块 时间戳(timestamp) :时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 元组(struct_time)   :struct_time元组共有9 ...

随机推荐

  1. SQL SERVER或oracl如何判断删除列

    ORACLE: BEGIN  EXECUTE IMMEDIATE 'DROP TABLE CUX_PO_VENDORS';EXCEPTION  WHEN OTHERS THEN    NULL;END ...

  2. CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第二件事就是 LED 驱动 ,点个灯

    /* * board_led.c * * Created on: 2018年7月3日 * Author: admin */ #include "board_uart.h" #inc ...

  3. html标签种类

    标签 描述 <!--...--> 定义注释. <!DOCTYPE> 定义文档类型. <a> 定义锚. <abbr> 定义缩写. <acronym& ...

  4. android学习:关于RelativeLayout叠放布局的问题

    RelativeLayout布局关于元素叠加的问题 1.RelativeLayout布局中的元素如果要实现元素叠加必须设置  RelativeLayout.ALIGN_PARENT_TOP  这样元素 ...

  5. Codeforces Round #483 (Div. 2) B题

    B. Minesweeper time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  6. ORACLE->SQL*Loader[20180712]

    https://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_concepts.htm#g1013706       SQL*Loader将外部 ...

  7. Redis底层数据类型

    Redis主要数据结构:简单动态字符串(SDS).双端链表.字典.跳跃表.整数集合.压缩列表和快速列表: 一.简单动态字符串(SDS): Redis没有直接使用C语言中的传统的字节数组保存字符串,而是 ...

  8. 解决在 win10 下 vs2017 中创建 MFC 程序拖放文件接收不到 WM_DROPFILES 消息问题

    解决方案 这个问题是由于 win10 的安全机制搞的鬼,即使以管理员权限运行也不行,因为它会把 WM_DROPFILES 消息过滤掉,那怎么办呢?只需在窗口初始化 OnInitDialog() 里添加 ...

  9. c语言实验报告(四) 从键盘输入字符串a和字符串b,并在a串中的最小元素(不含结束符)后面插入字符串b.

    a串中最小元素后的字符被舍弃了. #include<stdio.h>#include<string.h>void main(){  int i,min=0;  char a[2 ...

  10. PG 存储函数调用变量的3种方法。

    一.假设有表student,字段分别有id,remark,name等字段. 二.写一个存储函数,根据传过去的变量ID更新remark的内容. 调用该存储函数格式如下:select  update_st ...