python基础--函数,列表生成式,字典生成式,

1定义函数

如果不主动调用函数,函数是不会执行的
def say_hello():
    print 'hello1'
    print 'hello2'
    print 'hello3'
say_hello()
eg:对两个数进行求和
def sum_2_sum()
    num=10
    num=20
    result=num1+num2
    print '%d+%d=&d'%(num1,num2,result)
sum_2_sum()

2函数参数的使用

在函数名后面的小括号内填写参数多个参数之间用,分隔dedefide
形参出现与最开始,可以取任何名字
在函数调用时,传递的参数称为实参数
def sum_2_sum(sum1,sum2):
    result=num1+num2
    print '%d+%d=%d'%(num1,num2,result)
sum_2_sum(5,20)
eg:
编写一个名为collatz()的函数,他有一个名为number的参数,
如果参数是偶数,那么collatz()就打印出number//2
如果number是奇数,collatz()就打印出3*number+1
def collatz(number):
    if number%2==0:
        print number//2
    else:
        print 3*number+1
collatz(4)

3参数形参值四大参数:位置参数 默认参数 可变参数 关键字参数

https://www.cnblogs.com/VseYoung/p/python_def.html 供参考

定义和调用都应遵循:

先位置参数,默认参数,包裹位置,包裹关键字(定义和调用都应遵循)

位置参数:形参和实参个数必须保持一致

def print_hello(name, sex):
    sex_dict = {1: u'先生', 2: u'女士'}
    print 'hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生'))

# 两个参数的顺序必须一一对应,且少一个参数都不可以
# print_hello('tanggu', 1)

默认参数:形参和时参个数不同
    eg:求x的y次方,y的默认值为2
    def mypow(x,y=2):
        print x**y
    mypow(4)
    默认形参可以改变:mypow(4,3)
可变参数:
    def mysum(*agrs)
        """
        *args是可变参数
        args是元组的类型的数据
        args名字可变(因为是形参,所以可变)
        """
        print sgrs
        sum=0
        for item in agrs
            sum+=item
        print sum
    num=(1,2,35,78)
    mysum(*nums)
    *num解包
关键字参数:
    def getStuInfo(name,age,**kwargs):
        """
        **kwargs是一个字典,可以传递多对key—value对
        """
        print name,age
        print kwargs
    getStuInfo('westos',18,hobbies=['code','runner'])

4,返回值:

函数运算的结果,还需要进一步操作时,给一个返回值return
用来返回函数执行结果的,如果没有返回值,默认为None,python
可以间接返回多个值(返回一个元组)一旦遇到return,函数执行结束
后面的代码不会执行
def mypoow():
    return x**y,x+y
    print 'hello'
a=mypow(3)
print a

5,函数变量的作用域

局部变量:在函数内部定义普通变量,只在函数内部作用,函数执行结束会自动删除
a=1
print 'outside',id(a)
def fun():
  global a#声明a为全剧变量
  print a
  print 'inside:',id(a)
fun()
print a
print id(a)
eg:
def test(num):
  print '在函数内部%d对应的内存地址时作%d'%(num,id(num))
  result='hello'
  print '函数要返回的数据的内存地址是%d'%id(result)
  return result
a=10
print 'a变量保存数据的内存地址是%d'%id(a)
r=test(a)
print '%s的内存地址是%d'%(r,id(r))
eg:
(1)编写一个函数cacluate,可以接收任意多个数,返回是一个元组
元组的第一个数为左右参数的平均值,第一个参数是大于平均值的所有数
(2)编写函数,接收一个列表(包含30个整数)和一个整数k,返回一个新的、
列表,函数需求:
    将列表下标k之前对应(不包含k)的元素逆序
    将先下标k及之后的元素逆序
    [1,2,3,4,5] 3 [2,1,5,4,3]
(3)模拟轮盘抽奖游戏
 轮盘分为三部分: 一等奖, 二等奖和三等奖;
 轮盘转的时候是随机的,
       如果范围在[0,0.08)之间,代表一等奖,
       如果范围在[0.08,0.3)之间,代表2等奖,
       如果范围在[0, 1.0)之间,代表3等奖,

模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.

6函数装饰器

在不改变原函数的基础上,给函数增加功能"
把一个函数当作参数,返回一个替代版的函数
本质上:返回函数的函数
后续单独整理

7,列表生成式:

功能老强大了,一句话解决列表的生成
(1):找出1~10之间的所有偶数,并且返回一个列表(包含以这个偶数为半径的圆的面积)
    li = []
    for r in range(2, 11, 2):  # [2,4,6,8,10]
        square = math.pi * r * r
        li.append(square)
     print li
print [math.pi * r * r for r in range(2, 11, 2)]
(2):找出1~10之间的所有奇数,并且返回一个列表(所有的奇数转换为字符串)
print [str(r) for r in range(1,11,2)]
(3)自己定义函数并且引用
找出1~num之间的所有质数
def isPrime(num):
    for i in range(2,num):
        if num % i == 0:
            return False
    else:
        return True

print [i for i in range(2,101) if isPrime(i)]

8,字典生成式:

#1.假设有20个学生,学分在60~100之间,筛选出成绩在90分以上的学生
import random
stuInfo = {}
for i in range(20):
     name = 'westos' + str(i)
     score = random.randint(60,100)
     stuInfo[name] = score
     stuInfo['west9os'+str(i)] = random.randint(60,100)
hightscore = {}
for name,score in stuInfo.items():
     if score > 90:
         hightscore[name] = score
print hightscore

stuInfo = {'westos'+ str(i):random.randint(60,100) for i in range(20)}
print {name:score for name,score in stuInfo.items() if score >90}

2.将字典中的key值和value值调换
d = {'a':'apple','b':'bob','c':'cat'}
print {v:k for k,v in d.items()}
key值全部变为大写
print {k:k.upper()for k,v in d.items()}

3.大小写合并,key值最终全部为小写
d1 = {'A':10,'b':3,'a':5,'B':8,'d':1}
print {k.lower():d1.get(k.upper(),0)+d1.get(k.lower(),0)for k,v in d1.items()}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值