1、定义一个函数

你可以定义一个自己想要功能的函数,以下是简单的规则:

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

函数语法:

def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression] #默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。

2、函数调用

定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。

如下实例调用了printme()函数:

#!/usr/bin/python
# -*- coding: UTF-8 -*- # 定义函数
def printme(str):
print str;
return; # 调用函数
printme("我要调用用户自定义函数!");
printme("再次调用同一函数")

输出:

我要调用用户自定义函数!
再次调用同一函数

3、参数传递

在 python 中,类型属于对象,变量是没有类型的。比如:

a=[1,2,3]
a="Runoob"

[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,它仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。

对象还分为可变对象和不可变对象:

在 python 中,strings(字符串), tuples(元组), 和 numbers (数字)是不可更改的对象,而 list(列表),dict(字典) 等则是可以修改的对象。

不可变类型,比如:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。

可变类型,比如:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

python 函数的参数传递:

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

举例:

#!/usr/bin/python
# -*- coding: UTF-8 -*- #不可变类型
def ChangeInt(a):
a = 10
print "函数内取值:",a
return #可变类型
def Changelist( mylist ):
mylist.append([1,2,3,4]);
print "函数内取值: ", mylist
return b = 2
ChangeInt(b)
print "函数外取值:",b mylist=[1,2,3]
Changelist(mylist)
print "函数外取值:",mylist

输出:

函数内取值: 10
函数外取值: 2
函数内取值: [1, 2, 3, [1, 2, 3, 4]]
函数外取值: [1, 2, 3, [1, 2, 3, 4]]

4、参数类型

  • 必备参数
  • 关键字参数
  • 默认参数
  • 不定长参数

(1)必备参数:必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。比如一个函数声明时为printme(str1,str2),那么调用的时候必须按顺序传入两个str1、str2参数。

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

举例:

#!/usr/bin/python
# -*- coding: UTF-8 -*- # 可写函数说明
def printinfo(name, age):
print "Name: ", name;
print "Age ", age;
return; # 调用printinfo函数
printinfo(age=50, name="miki");

输出:

Name:  miki
Age 50

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

举例:

#coding=utf-8
def printinfo(name,age=25):
print name,age
return
printinfo(age=35,name="mike")
printinfo(name="nike")

输出:

mike 35
nike 25

(4)不定长参数:你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。

基本语法:

def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]

举例:

#coding=utf-8
def printinfo(arg1,*vartuple):
print arg1
for var in vartuple:
print var
return
printinfo(10,20,30,40)

输出:

10
20
30
40

5、匿名函数

python 使用 lambda 来创建匿名函数。

  • lambda只是一个表达式,函数体比def简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

匿名函数语法:

lambda [arg1 [,arg2,.....argn]]:expression

举例:

#coding=utf-8
# 可写函数说明
sum1= lambda arg1, arg2: arg1 + arg2; # 调用sum函数
print "相加后的值为 : ", sum1( 10, 20 )
print "相加后的值为 : ", sum1( 20, 20 )

输出:

相加后的值为 :  30
相加后的值为 : 40

6、return语句

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

举例:

# coding=UTF-8
def sum(arg1,arg2):
total=arg1+arg2;
return total
def sum1(arg1,arg2):
total=arg1+arg2;
return
total1=sum(10,20)
total2=sum1(10,20)
print total1
print total2

输出:

30
None

7、变量作用域

一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:

(1)全局变量:定义在函数外的拥有全局作用,全局变量可以在整个程序范围内访问。

(2)局部变量:定义在函数内部的变量拥有一个局部作用域,局部变量只能在其被声明的函数内部访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

举例:

# coding=UTF-8
total=0
def sum(arg1,arg2):
total=arg1+arg2
print "total函数内值:", total
return
sum(10,20)
print "total函数外值:", total

输出:

total函数内值: 30
total函数外值: 0

全局变量想作用于函数内,需加 global。

global---将变量定义为全局变量。可以通过定义为全局变量,实现在函数内部改变变量值。

一个global语句可以同时定义多个变量,如 global x, y, z。

举例:

# coding=UTF-8
total=0
def sum(arg1,arg2):
global total
total=arg1+arg2
print "total函数内值:", total
return
sum(10,20)
print "total函数外值:", total

输出:

total函数内值: 30
total函数外值: 30

python学习笔记之——python函数的更多相关文章

  1. Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...

  2. Python学习笔记010——匿名函数lambda

    1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...

  3. Python学习笔记4(函数与模块)

    1.Python程序的结构 Python的程序由包(package).模块(module)和函数组成. 模块是处理一类问题的集合,由函数和类组成. 包是由一系列模块组成的集合.包是一个完成特定任务的工 ...

  4. Python学习笔记(Ⅱ)——循环/选择/函数

    一.循环结构 python中提供了for循环和while循环两种操作,没有do……while语句. 1.for循环: 与其他语言中for循环的常见的写法如for (int i=0;i<10;i+ ...

  5. python学习笔记——高阶函数map()

    满足以下两点中任意一点,即为高阶函数: 1.函数接收一个或多个函数作为参数 2.函数返回一个函数 1 描述 用函数和可迭代对象中每一个元素作为参数,计算出新的迭代对象 map() 会根据提供的函数对指 ...

  6. Python学习笔记之Python的enumerate函数

    Python 的 enumerate() 函数就像是一个神秘的黑箱,你无法简单地用一句话来概括这个函数的作用与用法. enumerate() 函数属于非常有用的高级用法,而对于这一点,很多初学者甚至中 ...

  7. python 学习笔记 9 -- Python强大的自省简析

    1. 什么是自省? 自省就是自我评价.自我反省.自我批评.自我调控和自我教育,是孔子提出的一种自我道德修养的方法.他说:“见贤思齐焉,见不贤而内自省也.”(<论语·里仁>)当然,我们今天不 ...

  8. python 学习笔记一——Python安装和IDLE使用

    好吧,一直准备学点啥,前些日子也下好了一些python电子书,但之后又没影了.年龄大了,就是不爱学习了.那就现在开始吧. 安装python 3 Mac OS X会预装python 2,Linux的大多 ...

  9. python学习笔记(一):python简介和入门

    最近重新开始学习python,之前也自学过一段时间python,对python还算有点了解,本次重新认识python,也算当写一个小小的教程.一.什么是python?python是一种面向对象.解释型 ...

随机推荐

  1. 使用git时出现Please make sure you have the correct access rights and the repository exists.问题已解决。

    使用git时,出现Please make sure you have the correct access rights and the repository exists.问题已解决. 今天我在使用 ...

  2. 一文详解python的类方法,普通方法和静态方法

    首先形式上的区别,实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls. 静态方法无隐含参数,主要为了类实例也可以直接调用静态方法. 所以逻辑上,类方法被类调用,实例方法被实例调用,静 ...

  3. System.Thread.TImer控件——http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml

    http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml

  4. (转) mysqldumpslow使用说明总结

    原文:http://blog.csdn.net/langkeziju/article/details/49301993 mysqldumpslow使用说明mysqldumpslow --helpUsa ...

  5. 在Vue的webpack中结合runder函数

    在Vue的webpack中结合runder函数 1.引入: <h1>下面是vue的内容:</h1> <div id="app"> <log ...

  6. 【Java并发编程】:使用wait/notify/notifyAll实现线程间通信

    在java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信.在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调 ...

  7. javascript闭包获取table中tr的索引 分类: JavaScript 2015-05-04 15:10 793人阅读 评论(0) 收藏

    使用javascript闭包获取table标签中tr的索引 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  8. CSS_Spirte实现原理 分类: HTML+CSS 2015-04-28 22:58 531人阅读 评论(0) 收藏

    CSS Spirte就是所谓的把很多的小图标合并成一张大的图片,然后使用CSS的background-position属性,来动态的定位自己需要图标的位置.这样做的目的主要是减少HTTP请求,加快网页 ...

  9. android studio 3.1.4下载安装配置(附旧版本下载地址)

    windows下安装android studio.当前时间2018年9月. 最新版本的android studio3.2.0-release出来了,拥有许多新的特性 可能我是一个业余的android开 ...

  10. php中接收参数,不论是来自GET还是POST方法

    不多说,直接上代码, 其实也就是先用GET的方法去获取,如果值为空,在用POST方法去获取 写下来是为了方便和备忘 function getParam($str){       if ( isset( ...