孙广东  2016.1.1

交互:

C# 运行Python代码:

http://stackoverflow.com/questions/11779143/run-a-python-script-from-c-sharp

反着来:

http://stackoverflow.com/questions/3260015/run-a-c-sharp-application-from-python-script

Python语言的特点:
高级语言
内置电池(大量的标准库)
解释型(有时JIT编译)
面向对象(尤其是Python 3)
强类型动态语义
语法强调可读性
支持重用通过模块和包

Python程序的“形状” :
    Python定义代码块(在Python中使用 空格 和 冒号)。

看一个 Demo:

import random

def get_days():
# List<string> days = new List<sting>();
# days[]
days = ['mon','tues','wed','thurs','fri','sat','sun']
return days def get_random_report():
weather = ['sunny', 'lovely','cold']
return weather[ random.randint(0, len(weather) - 1)] def main():
days = get_days() for day in days:
report = get_random_report()
print("On {0} it will be {1}.".format(day, report)) if __name__ == "__main__":
main()

C# 都有什么呢?

一、 Everything is an object (一切皆对象)

C# :

class Document: object
{
public void Serialize()
{
// ...
} public override string ToString()
{
return "I am a document ";
}
}

Python:

class Document(object):
def serialize(self):
print("太好了!") def __str__(self):
return "I am a document."

二、IEnumerable + foreach loops

C# :

        int[] numbers = new[] {1, 2, 3, 4, 5, 6};
foreach (var n in numbers)
{
Console.Write(n + ",");
}
class ShoppingCart : IEnumerable<Tuple<string, float>>
{
List<Tuple<string, float>> cartItems = new List<Tuple<string, float>>(); public void Add(string name, float price)
{
cartItems.Add(new Tuple<string, float>(name, price));
} public IEnumerator<Tuple<string, float>> GetEnumerator()
{
return cartItems.GetEnumerator();
} IEnumerator IEnumerable.GetEnumerator()
{
return cartItems.GetEnumerator();
}
}

Python :

numbers = [1, 2, 3, 4, 5, 6]

for n in numbers:
print(n, end=',')
for v in enumerate(numbers):
print(v, end=',')
for index, k in enumerate(numbers):
print(k, end=',')
class CarItem:
def __init__(self, name, price):
self.price = price
self.name = name def __repr__(self):
return "({0}, ${1})".format(self.name, self.price) class ShoppingCart:
def __init__(self):
self.__items = [] def add(self, cart_item):
self.__items.append(cart_item) def __iter__(self):
return self.__items.__iter__() print()
print() cart = ShoppingCart()
cart.add(CarItem("CD", 19.99))
cart.add(CarItem("Record", 17.99)) for item in cart.items:
print(item)

三、Properties (int Age {get; set;})

C# :

    class ShoppingCart
{
List<Tuple<string, float>> cartItems = new List<Tuple<string, float>>(); public float TotalPrice
{
get
{
float total = 0;
foreach (var item in cartItems)
{
total += item.Item2;
}
return total;
}
}
}

Python :

class ShoppingCart:
@property
def total_price(self):
total = 0.0
for item in self.__items:
total += item.price
return total

print("Total price is ${0:,}".format(cart.total_price))

四、Anonymous types (匿名类型)

C#:

    public static void Main(String[] args)
{
var o = new
{
Id = 2,
Registered = true
}; Console.WriteLine(o); if (o.Registered)
{
Console.WriteLine("They are registered...");
}
}

python:

class AnonObject(dict):
__getattr__ = dict.get
__setattr__ = dict.__setitem__ person = {
"name": "Michael",
"age": 40
}
anonPerson = AnonObject(name = "Michael", age=40) print(anonPerson)
print(anonPerson["name"])
print(anonPerson.name)
print(anonPerson.age)

五、Lambda expressions

C#:

    private static IEnumerable<int> FindNumbers(Predicate<int> predicate)
{
for (int i = 0; i < 100; i++)
{
if (predicate(i))
{
yield return i;
}
}
} private IEnumerable<int> nums = FindNumbers(n => n%11 == 0);
// [0, 11,22,33,44,55,66,77,88,99]

python:

def get_numbers(limit, predicate):
for n in range(0, limit):
if predicate(n):
yield n def divide_by_ll(n):
return n % 11 == 0 output = list(get_numbers(40, divide_by_ll))
print(output)

def get_numbers(limit, predicate):
for n in range(0, limit):
if predicate(n):
yield n # def divide_by_ll(n):
# return n % 11 == 0 output = list(get_numbers(40,lambda n : n % 11 ==0 ))
print(output)

六、NuGET package management

七、Entity Framework 》ORMs

八、ASP.NET MVC

九、LINQ

C# :

        var older =
from p in people
where p.age > 30
orderby p.age descending
select new { age = p.age, name = p.name }

python:

class Person:
def __init__(self, name, age, hobby):
self.hobby = hobby
self.name = name
self.age = age def __repr__(self):
return "{0} is {1} and likes {2}".format(self.name, self.age, self.hobby) class AnonObject(dict):
__getattr__ = dict.get
__setattr__ = dict.__setitem__ people = [
Person("Jeff", 50, "Biking"),
Person("Michael", 40, "Biking"),
Person("Saerh", 30, "Running"),
Person("Tony", 24, "Jogging"),
Person("Zoe", 12, "TV"),
] bikers = [
AnonObject(Name = p.name, PastTime = p.hobby)
for p in people
if p.hobby == "Biking"
]
bikers.sort(key=lambda p:p.Name) for b in bikers:
print(b)

十、Iterator methods / yield return

C#:

    private static IEnumerable<int> FibonacciGenerator()
{
int current = 1;
int next = 1; yield return current;
while (true)
{
int temp = current + next;
current = next;
next = temp;
yield return current;
}
}

python:

def fibinnoci():
current = 0
nxt = 1 while True:
current, nxt = nxt, current + nxt
#print("Generating" + str(current))
yield current for n in fibinnoci():
if n > 200:
break print(n, end=', ')
# 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,

十一、JIT compilation








C#程序猿学习 Python的更多相关文章

  1. 人在囧途——Java程序猿学习Python

    引言 LZ之前其实一直对python都很好奇,只是苦于平时没有时间去了解它,因此趁着51假期这个机会,便迫不及待的开始了自己的探索.作为一个标准的Java程序猿,在了解python的过程当中,LZ遇到 ...

  2. 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  3. Java程序猿学习当中各个阶段的建议

    回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议   引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的 ...

  4. 顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  5. 【Python】Java程序员学习Python(五)— 函数的定义和使用

    不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍, ...

  6. Java程序猿学习的建议(转)

    第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应 ...

  7. 10个Python练手小程序,学习python的很好的资料

    [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去  掉不满足条件的排列 ...

  8. 【Python】Java程序员学习Python(三)— 基础入门

    一闪一闪亮晶晶,满天都是小星星,挂在天上放光明,好像许多小眼睛.不要问我为什么喜欢这首歌,我不会告诉你是因为有人用口琴吹给我听. 一.Python学习文档与资料 一般来说文档的资料总是最权威,最全面的 ...

  9. 【Python】Java程序员学习Python(二)— 开发环境搭建

    巧妇难为无米之炊,我最爱的还是鸡蛋羹,因为我和鸡蛋羹有段不能说的秘密. 不管学啥,都要有环境,对于程序员来说搭建个开发环境应该不是什么难题.按顺序一步步来就可以,我也只是记录我的安装过程,你也可以滴. ...

随机推荐

  1. 语音跟踪:信号分解、锁相、鸡尾酒会效应、基于PR的信号分离

    NLP中关于语音的部分,其中重要的一点是语音信号从背景噪音中分离.比如在一个办公室场景中,有白天的底噪-类似于白噪音的噪音.空调的声音.键盘的啪啪声.左手边45度7米元的地方同事讨论的声音.右手边1. ...

  2. elk大纲

    一.ELK功能概览 1.检索 2.数据可视化--实时监控(实时刷新) nginx 访问量 ip地区分布图(大数据) 3.zabbix 微信联动报警 4.大数据日志分析平台(基于hadoop) 二.ka ...

  3. The following packages have unmet dependencies:

    root@ubuntu:~# apt-get install open-iscsiReading package lists... DoneBuilding dependency treeReadin ...

  4. (转)Oracle数据库DBA必备基本技能

    [Oracle数据库DBA必备基本技能] shutdown Normal 需要等待所有的用户断开连接 Immediate 等待用户完成当前的语句 Transactional    等待用户完成当前的事 ...

  5. JAVA基础——集合Iterator迭代器的实现

    一.迭代器概述 1.什么是迭代器? 在Java中,有很多的数据容器,对于这些的操作有很多的共性.Java采用了迭代器来为各种容器提供了公共的操作接口.这样使得对容器的遍历操作与其具体的底层实现相隔离, ...

  6. Luogu P3797 妖梦斩木棒

    解题思路 用线段树做这个就不用说了吧,但是要维护的东西确实很神奇.在每一个节点上都维护一个$lbkt$,表示这个区间上最靠左的右括号的位置:一个$rbkt$,表示这个区间上最靠右的左括号的位置.还有一 ...

  7. MyBatis 的基本要素—SQL 映射文件

    MyBatis 真正的强大在于映射语句,相对于它强大的功能,SQL 映射文件的配置却是相当简单.对比 SQL 映射配置和 JDBC 代码,发现使用 SQL 映射文件配置可减少 50% 以上的代码,并且 ...

  8. codeforces 372 Complete the Word(双指针)

    codeforces 372 Complete the Word(双指针) 题链 题意:给出一个字符串,其中'?'代表这个字符是可变的,要求一个连续的26位长的串,其中每个字母都只出现一次 #incl ...

  9. SqlServer2008必须开启哪些服务

    SQL Server 2008 大概有下面这些服务 SQL Active Directory Helper 服务支持与 Active Directory 的集成SQL Full-text Filter ...

  10. 【Codeforces 988D】Points and Powers of Two

    [链接] 我是链接,点我呀:) [题意] 让你从一个集合中找出来一个子集 使得这个子集中任意两个数相减的绝对值是2^的整数次幂 且集合的大小最大 [题解] 考虑子集的个数为4个或4个以上 那么我们找到 ...