Python函数(def)

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。函数能提高应用的模块性,和代码的重复利用率。

定义函数规则

  1. 函数代码块以def关键字开头,后接函数标识符名称和圆括号().
  2. 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  3. 函数的第一行语句可以选择性的使用文档字符串,用于对函数说明。
  4. 函数内容以冒号起始,并且缩进。
  5. return【表达式】结束函数,选择性的返回一个值给调用方,不带表达式的return相当于返回 None。

变量

局部变量:作用域只在当前函数内部,外部变量默认不能被函数内部修改,只能引用;函数内部是可以修改列表,集合,实例(类)

全局变量:可以全局使用,函数内部也可以调用

  1. 函数内部修改列表,集合,实例
names = ["alex", "jack"]
info = {"name": "jack"} def change():
print(names, info)
names[0] = "Mack"
names.append("rain")
info["age"] = 22
change()
print(names, info)

输出内容:

['alex', 'jack'] {'name': 'jack'}
['Mack', 'jack', 'rain'] {'age': 22, 'name': 'jack'}

2.局部变量修改全局变量,使用global(默认不建议修改)

n = "a"

def change():
# global n
n = "nihao"
print(n) ## 函数内部的n
change()
print(n) ## 全局n

输出内容:

nihao            ## 函数内部的n
a ## 全局的n

3.如果特定需要使用函数修改全局变量可以使用global(不建议修改全局变量)

n = "a"

def change():
global n
n = "nihao"
print(n)
change() print(n)

输出内容:

nihao            ## 函数内部的n
nihao ## 全局被修改的n

语法:

Python定义函数使用def关键字,一般格式如下:

def 函数名(参数列表):
函数体 函数名()

函数调用

定义一个函数:给了函数一个名称,指定了函数里包含的参数和代码块结构,这个函数基本结构完成后,就可以通过另一个函数调用执行,也可以直接从Python命令提示符执行。

2参数

  1. 必须参数(按顺序,又叫位置参数)
  2. 关键字参数(必须放在位置参数后面)
  3. 默认参数 (必须放在位置参数后面)
  4. 不定长参数(*args等同于元组,依照位置参数形式传入;**kwargs等同于字典,依照于关键参数形式传入)

参数分为:实参和形参

实参:有确定值的参数,所有的数据类型都可以被当做参数传递给函数。

形参:只有在被调用时才会分配内存,调用结束后,立即释放内存;值仅在函数内部有效(局部变量,形参的作用域只在当前函数内部有效)

必须参数:

必须参数须以正确的顺序传入函数,调用时的数量必须和声明时一样;否则出现语法错误;

def printhehe(hehe):      ##hehe就是必须参数"你好"就是hehe的值
'''
:param hehe:打印输入内容
:return:none
'''
print(hehe)
printhehe("你好")

输出内容:

你好

关键字参数:

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值,使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。

def name_info(name, age):
'''
:param name:
:param age:
:return:
'''
print("名字:", name)
print("年龄:", age)
return
name_info(age=28, name="lin")

输出内容:

名字: lin
年龄: 28

默认参数(默认参数需要放在顺序参数后面):

调用函数时,如果没有传递参数,则会使用默认参数;常见默认性别,默认国籍等值;

def name_info(name, age, sex="man"):
'''
:param name:打印任何传入的字符串
:param age:
:param sex:
:return:
'''
print("名字:", name)
print("年龄:", age)
print("性别:", sex) name_info("baolin", "28", "girl")
print("==============================")
name_info("baolin", "28") ## 默认不输入sex性别时,会使用默认值“man”

输出内容:

名字: baolin
年龄: 28
性别: girl
==============================
名字: baolin
年龄: 28
性别: man

不定长参数:

在一些情况下,一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数;不定长参数声明时不会命名;

def stu_info(name, age, course, country="CN", hobbie="girl"):
print("----------注册信息----------")
print("姓名:", name)
print("年龄:", age)
print("国际:", country)
print("课程:", course)
print("爱好:", hobbie) stu_info(course="linux", age=22, name="lin", hobbie="man")

默认输出如下:

----------注册信息----------
姓名: lin
年龄: 22
国际: CN
课程: linux
爱好: man

不定长参数有*args(元组) 和 **kwargs(字典)

def stu_info(name, age, course, country, hobbie, *args, **kwargs):
print("----------注册信息----------")
print("姓名:", name)
print("年龄:", age)
print("国际:", country)
print("课程:", course)
print("爱好:", hobbie)
print("多余元组:", args) # args依照元组的形式输出
print("多余字典:", kwargs) # kwargs依照字典的形式输出
print(type(args))
print(type(kwargs))
print("住址:", kwargs["addr"]) # 对字典进行调用
stu_info("lin", 22, "linux", "CN", "girl", "IT", "钱", id="stu0011", addr="回龙观")

输出如下:

----------注册信息----------
姓名: lin
年龄: 22
国际: CN
课程: linux
爱好: girl
多余元组: ('IT', '钱', '人民币')
多余字典: {'id': 'stu0011', 'addr': '回龙观'}
住址: 回龙观 # 调用输出"住址"
<class 'tuple'>
<class 'dict'>

return语句(返回函数的执行结果,同时也代表函数的结束):

return【表达式】语句用于退出函数,选择性的向调用方返回一个表达式,不带参数值的return语句返回None;

def calc(a, b):
return a**b c = calc(10, 15)
print(c)

输出内容:

1000000000000000

递归函数(函数在内部调用自身本身,最多调用998次):

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

例:使用递归函数实现二分算法,查找需要的数值是否在列表中;

data = range(100)

def efen(RanGeZhi, ChaZhi):
if len(RanGeZhi) > 0:
ZhongJian = int(len(RanGeZhi)/2) if RanGeZhi[ZhongJian] == ChaZhi:
print("你要找的值为%s" % ChaZhi)
elif RanGeZhi[ZhongJian] > ChaZhi:
print("你要查找的值在左边", RanGeZhi[0:ZhongJian])
efen(RanGeZhi[0:ZhongJian], ChaZhi)
else:
print("你要查找的值在右边", RanGeZhi[ZhongJian+1:])
efen(RanGeZhi[ZhongJian+1:], ChaZhi)
else:
print("你要的值未找到")
efen(data, 10)

map是将“,”后面列表值,交给“,”前面的函数运算,并返回结果;

map()是 Python 内置的高阶函数,它接收一个函数 a 和一个 list,并通过把函数 a 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

例:使用map将['adam', 'LIN', 'BaO']转换为['Adam', 'Lin', 'Bao']

def format_name(s):
s1 = s[0:1].upper()+s[1:].lower()
return s1
for i in map(format_name, ['adam', 'LIN', 'BaO']):
print(i)

输出结果:

Adam
Lin
Bao

匿名函数(lambda)

当我们在传入函数时,有些时候,不需要显式定义函数,直接传入匿名函数更方便。匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果;(lambda匿名函数最复杂的运算就是三元运算)

用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。

例1:关键字lambda表示匿名函数,冒号前面的"n"表示函数参数。

正常函数:
def a(n):
return n**n
print(a(10)) 匿名函数:
b = lambda n: n**n
print(b(10))

例2:将可循环的值分别取到"x"中运算并打印出来

for i in map(lambda x: x + 1, [1, 2, 3]):
print(i)

输出结果:

2
3
4

例2:lambda使用三元运算(如果x大于5输出x*x,否则输出x)

lambda方法:
for i in map(lambda x: x*x if x > 5 else x, [1, 2, 3, 4, 5, 6, 7, 8]):
print(i)
输出结果:
1
2
3
4
5
36
49
64

三元运算:

知识点插入:

# 普通运行
a = 4
b = 5
if a > 10:
c = a
else:
c = b
print(c) # 三元运算
d = a if a > 10 else b
print(d)

输出结果:

5
5

高阶函数

  1. 把一个函数的内存地址,当做参数传给另外一个函数;
  2. 一个函数把另外一个函数,当做返回值返回。

    例:将内置函数"abs"当成参数传给函数“add”
def add(x, y, z):
return z(x) + z(y) print(add(3, -6, abs))

输出内容:

9

006-Python函数的更多相关文章

  1. PYTHON 100days学习笔记006:函数和模块的使用

    目录 Day006:函数和模块的使用 1.函数的作用 2.定义函数 2.1 语法 2.2 实例 2.3 函数的调用 4.函数的参数 4.1 必须参数 4.2 关键字参数 4.3 默认参数 4.4 不定 ...

  2. python 函数之day3

    一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...

  3. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  4. Python函数讲解

    Python函数

  5. Python函数信息

    Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...

  6. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  7. Python开发【第四章】:Python函数剖析

    一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...

  8. Python函数解析

    对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...

  9. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  10. Python函数1

    Python 函数命令的使用 想想我们之前数学中学到的函数,首先我们需要定义一个函数,例如f(x)=x, 当x输入任意数的时候,f(x)都能输出和x相等的数值. 那么在Python中是如何实现的呢? ...

随机推荐

  1. Struts2学习(二)

    1.Struts2的Servlet的API的访问 1.1   完全解耦合的方式 ActionContext context = ActionContext.getContext( ); 通过conte ...

  2. [转] 深入理解Batch Normalization批标准化

    转自:https://www.cnblogs.com/guoyaohua/p/8724433.html 郭耀华's Blog 欲穷千里目,更上一层楼项目主页:https://github.com/gu ...

  3. [Kubernetes]CentOS7部署Kubernetes集群

    环境介绍及安装前准备 三台机器,用于部署k8s的运行环境: 节点 ip Master 192.168.243.138 Node1 192.168.243.139 Node2 192.168.243.1 ...

  4. 2018牛客暑期ACM多校训练营第一场(有坑未填)

    (重新组队后的第一场组队赛 也是和自己队友的一次磨合吧 这场比赛真的算是一个下马威吧……队友上手一看 啊这不是莫队嘛 然后开敲 敲完提交发现t了 在改完了若干个坑点后还是依然t(真是一个悲伤的故事)然 ...

  5. 3. Python 字典 常用办法总结

    Python字典客储存任意类型的对象,如字符串.数字.元祖.列表.字典.bool等. 优点:取值方便,速度快 1.创建字典 字典由键(key)和对应值(value)成对组成. 字典也被称作关联数组或哈 ...

  6. U3D虚拟摇杆制作

    来自https://www.cnblogs.com/jiuxuan/p/7453762.html 1.创建两个Image,修改第一个Image名称为 Background,把第二个Image放入 Ba ...

  7. a.py

    #!/usr/bin/python # -*- coding: UTF-8 -*- import os import sys import re import shutil import glob d ...

  8. 手动注册 Omron SYSMAC OPC Server 2

    使用如下注册表操作实现 Omron SYSMAC OPC Server 2 的注册,包括COM组件和ProgID. 注意,手动注册适用于在win10等不兼容老版本程序的正常使用的情况,此方法一般在单机 ...

  9. oracle加密传输

    参考文章: http://blog.itpub.net/24052272/viewspace-2129175/ oracle在传输过程中,正常是明文传输的,例如SQL以及执行的结果. 看看做的测试: ...

  10. 前端 ------ 03 body标签中的相关标签

    列表标签 <ul>.<ol>.<dl> 表格标签 <table> 表单标签 <form> 一.列表标签 列表标签分为三种. 1.无序列表&l ...