【11】Python函数学习(一)

本文主要介绍python函数,也就是函数式编程的用法。

何为函数:

函数是组织好的,可重复使用的,用来实现单一,或相关功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道python提供许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

规范:

  1. 面向对象  >>>>>> 类  >>>>>>class
  2. 面向过程  >>>>>> 过程 >>>>>def
  3. 函数式编程 >>>>> 函数 >>>>>def

    定义一个函数:

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

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

    函数语法:

    def 标识符1():

    ‘Hello world’ #添加介绍(可不加)

    x +=1  #代码块

    return x #定义返回值

    实例:

def hello():
    "hello world!"
    print(‘Hello world!‘)

hello() #调用函数

运行结果:

Hello world!

函数与过程:

#函数
def text1():
    print(‘in the text1‘)
    return 0

#过程
def text2():
    print(‘in the text2‘)

x=text1()
y=text2()
print(‘from text1 return is  %s‘%x)
print(‘from text2 retuin is  %s‘%y)

运行结果:

in the text1

in the text2

from text1 return is  0

from text2 retuin is  None

注:函数与过程的区别(区别不大)

过程是没有返回值的函数,默认为None。

函数参数及调用

函数的返回值:

def test1():
    print(‘in the text1‘)
def test2():
    print(‘in the text2‘)
    return 0   #先打印,在返回return
def test3():
    print(‘in the text3‘)
    return 1,‘hello‘,[‘a‘,‘b‘]

x=test1()
y=test2()
z=test3()
print(x)
print(y)
print(z)

运行结果:

in the text1

in the text2

in the text3

None  #没有return默认返回 None

0  #返回return定义的值

(1, ‘hello‘, [‘a‘, ‘b‘])  #以一个元组返回

注:

  1. 不写return,默认返回None
  2. return=1 返回object
  3. return>1 返回一个tuple元组

    为什么要有返回值:需要整个函数的执行结果。

    有参数的函数

def text1(x,y):  #有参数的函数
    print(x,y)
    return 0
text1()

这样会报错,没有定义参数TypeError: text1() missing 2 required positional arguments: ‘x‘ and ‘y‘

def text1(x,y): #行参 :根据实参变化而变化,没有实际的参数。
    print(x,y)
    return 0
text1(1,2) #实参 :实际参数
实参跟形参必须一一对应,个数不能超。

def text1(x,y): #行参
    print(x,y)
    return 0
text1(1,2) #这里叫 位置调用
text1(x=3,y=4) #关键字调用
x=5
y=10
text1(x=x,y=y)  #这里面的x=x,前后两个x虽然长得一样,但是意义不一样。x=x,第一个x表示形参里面的x,第二才是定义的x变量值

运行结果:

1 2

3 4

5 10

关键字调用与位置调用

def text2(x,y,z): #行参
    print(x,y,z)

text2(1,2,3) #位置调用
text2(y=11,z=22,x=33) #关键字调用
text2(90,40,z=50) 
text2(x=10,20,30)  #运行报错
text2(10,x=10,) #运行报错

结论:

  1. 参数调用可以分为位置调用和关键字调用
  2. 位置调用,一一对应
  3. 关键字调用可以不按顺序填写
  4. 根据报错得结论,必须位置参数放在关键字前面,程序才不会出错。

    函数的非固定参数

    默认参数:

def test(x,y=2):  #这里y设定默认参数
    print(x)
    print(y)
test(11,22)  #定义位置参数

运行结果:

11

22

def test(x,y=2):  #这里y设定默认参数
    print(x)
    print(y)
test(11)  #定义位置参数

运行结果:

11

2

结论:

调用函数的时候,默认参数非必传。

以上所讲的参数调用都有一个共同点,那就是调用参数的个数,多了或者少了,都会报错(某些情况下,少参数不会报错,多了一定会报错)。如果我有N个实参,你不肯能写N个形参,针对实参不固定的情况下,有了参数组这个功能出现。具体看下面介绍

参数组:

def test1(*args):   以星开头,定义变量名。这里星的作用表示,接收N个实参。规范就是*args
    print(args)  以元组的形式打印出来

test1(1,2,3,4,5,6)
test1(*[1,2,3,4,5,6])  #args=tuple([1,2,3,4,5,6])

def test2(x,*args):
    print(x,args)
test2(10,1,2,3,4,4,5,6)

运行结果:

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

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

10 (1, 2, 3, 4, 4, 5, 6)

应用:预留参数

参数组(建字典)

def text(**kwargs):   #把N个关键字参数转换成字典的形式
    print(kwargs)
text(name=‘alex‘,age=18)

运行结果:

{‘name‘: ‘alex‘, ‘age‘: 18}

def text(**kwargs):   #把N个关键字参数转换成字典的形式
    print(kwargs)
    print(kwargs[‘name‘])
    print(kwargs[‘age‘])

text(name=‘alex‘,age=18)
text(**{‘name‘:‘alex‘,‘age‘:‘18‘})

运行结果:

{‘name‘: ‘alex‘, ‘age‘: 18}

alex

18

{‘name‘: ‘alex‘, ‘age‘: ‘18‘}

alex

18

def text(name,age=18,*args,**kwargs):   #把N个关键字参数转换成字典的形式
    print(name)
    print(age)
    print(args)
    print(kwargs)

text(‘alex‘,names=‘alex‘,wante=‘30‘)

运行结果:

alex

18

()

{‘names‘: ‘alex‘, ‘wante‘: ‘30‘}

总结:

*args属于位置参数,接收将N个位置参数,转换成元组

**kwargs属于关键字参数,接收将N个关键字,转换成字典

位置参数调用,只能在关键字参数调用前面,否则会报错。

时间: 2024-11-10 15:15:35

【11】Python函数学习(一)的相关文章

[python 函数学习篇]默认参数

python函数: 默认参数: retries=4 这种形式 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while True: ok = raw_input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retri

Python函数学习-参数类型

函数的参数 在定义Python函数时可定义形参,这些参数在调用时候才能确定具体的值,由函数的调用者负责为行参传入参数值 函数的参数类型 一. 位置参数 也叫必传参数,顺序参数,是最重要的,也是必须在调用函数时明确提供的参数!位置参数必须按先后顺序,一一对应,个数不多不少的传递! 说明:a,b,c是函数add的行参,没有具体的值,只有在add(x,y,z)是才被传入值,a=x=1,b=y=2,c=z=3, 其中x,y,z叫做实参,add(4,5,6,7),add(5,7)均为错误调用 二.关键字参

python函数学习

与其他语言不同,在这里函数也是可以作为参数被调用的(书上称为"一等公民") 配合参数收集关键字更见笑! 函数内部还可以定义函数 内部函数可以看做一个闭包(闭包是一个可以由另一个函数动态生成的函数,并且可以改变和存储函数外创建的变量的值)??? 匿名哈数lambda(),用来代替小函数,定义回调函数??? 生成器 这绝对是一个超级好用的东西.python有一些自带的生成器函数,如range() 还可以定义自己的生成器函数,不同之处其返回语句由yield完成. 装饰器 本质:把一个函数作为

【12】Python函数学习(中)

作用域.局部和全局变量 前向引用: def test(name,age=18,*args,**kwargs):      print(name)    print(age,args,kwargs)    school("Test")   #程序执行从上到下的,这里的school还没定义,所以执行报错.test('alex',age=20,flag="F",water=1.5) def school(source):    print(source) 运行结果: 报错

十一、python函数学习

1.    定义函数 def   函数名(形参): 函数体 return  xxx--------其下面的内容不再执行 --------------------------------------------------------------------------------------------------------------- 2.执行函数 函数名(实参) ---------------------------------------------------------------

pythonの函数学习笔记(一)

函数是可以实现一些特定功能的小方法或小程序定义函数function的方法:def function_name(arg1,arg2[,...]): statement [return value]注意事项:1.def开头,代表定义函数,def和函数名中间要敲一个空格:2.返回值不是必须的,如果没有renturn语句,则默认返回值None:3.函数名必须以下划线或字母开头,可以包含任意字母.数字或下划线的组合,区分大小写且不能是保留字: py使用名称空间的概念存储对象,这个名称空间就是对象作用的区域

C++11 virtual函数学习笔记

#include<iostream> #include<string> using namespace std; class Base { public: Base(){} ~Base(){} public: virtual void f1(int x){ cout << "baseclass: f1() " << x << endl; } virtual void f2()final{ cout << "

python 函数学习之sys.argv[1]

一.sys 模块 sys是Python的一个「标准库」,也就是官方出的「模块」,是「System」的简写,封装了一些系统的信息和接口. 官方的文档参考:https://docs.python.org/2/library/sys.html 中文版文档参考:http://xukaizijian.blog.163.com/blog/static/170433119201111625428624/ 二.sys.argv 参数 sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身

[python 函数学习篇] 关键字参数

函数可以通过 关键字参数 的形式来调用,形如 keyword = value .例如,以下的函数: def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): print "-- This parrot wouldn't", action, print "if you put", voltage, "volts through it." print &qu